Posez une question à la machine
Un seul langage, dans le champ de recherche de la fenêtre et dans bws list --query. Un mot seul cherche dans le nom, le nom affiché, le compte et le chemin de lancement. Un champ affine la recherche. 21 champs, et le même texte signifie la même chose dans les deux moitiés de l'outil.
Six qui répondent à une vraie question
Ce qui devrait tourner et ne tourne pas
start:auto !status:running
La première requête que la plupart des gens écrivent, et celle à laquelle services.msc ne peut pas du tout répondre.
Les services dont le fichier a disparu
file:missing
Une entrée qui pointe vers un exécutable absent du disque. Le plus souvent une désinstallation qui a laissé l'enregistrement derrière elle.
Non signés, sans le bruit des sessions
signed:no peruser:no
Les familles par utilisateur font une copie par session et remplissent une liste de quasi-doublons. Ceci interroge le reste.
En marche bien que désactivé
mismatch:running
Une configuration et un état qui ne concordent pas - une entrée que le gestionnaire est réglé pour ne jamais démarrer, qui tourne quand même.
Tout ce qui demande des droits de débogage
privilege:SeDebugPrivilege
Un privilège qui permet à un processus d'ouvrir n'importe quel autre. Il vaut la peine de savoir quels services le demandent.
Ce que l'outil n'a pas pu lire
account:?
Les entrées dont cette session n'a pas pu lire le compte. Une question que services.msc ne sait même pas poser.
Comment s'écrit une requête
Termes
- Les termes sont séparés par des espaces et tous doivent correspondre - il n'y a pas de mot-clé
andparce qu'il ne pourrait rien signifier d'autre. - Le même champ écrit deux fois est la seule exception :
status:running status:stoppedveut dire l'un ou l'autre, car c'est ce qu'écrit le fait de cocher deux filtres. Deux bornes sur un nombre affinent toujours -pid:>1000 pid:<2000est l'intervalle entre elles. !devant un terme le nie :!status:running. Dans un fichier batch avecsetlocal EnableDelayedExpansion, cmd avale ce!sans un mot et la requête signifie discrètement autre chose - écrivez^!entre les guillemets dans ce cas.- Une virgule à l'intérieur d'un champ est un ou :
start:manual,disabled. - Les guillemets protègent tout ce qui contient des espaces ou des deux-points :
account:"NT SERVICE\McmSvc". - Un chemin collé tel quel -
C:\Windows\System32\svchost.exe- est recherché, pas lu comme un champ appelé C.
Comment le texte est comparé
name:spooltrouve tout ce qui le contient - le comportement par défaut, car c'est ce qu'on attend d'un champ de recherche.name:=spoolerest exact.name:spool*accepte les jokers,*et?.name:/^Sql.*/est une expression régulière, et entre les barres obliques elle s'écrit comme s'écrivent les expressions régulières :\?,\\et une virgule y signifient ce qu'ils signifient là. Une barre oblique qui ne se ferme jamais est une erreur - pour chercher la barre oblique elle-même, écrivez\/ou utilisez des guillemets.- La casse est ignorée, y compris hors ASCII - un nom affiché en polonais ou en grec correspond quelle que soit la façon dont il est saisi.
Trois mots que tout champ accepte
any- il y a une valeur, quelle qu'elle soitnone- il n'y a réellement aucune valeur - l'entrée n'en a pas?- l'outil n'a pas pu lire ce champ, ou ne l'a pas lu, ce qui est une question queservices.mscne sait même pas poser
Une valeur mal saisie est une erreur, jamais un résultat vide. status:runing répond Did you mean running? et se termine avec le code 2. Une liste vide ressemblerait à une réponse, et la différence entre « rien ne correspond » et « vous avez mal tapé » est la différence entre une machine saine et un audit qui n'a rien prouvé. Une requête qui n'affinerait rien est aussi refusée en ligne de commande, afin qu'un script n'opère pas sur toute la machine à cause d'une faute de frappe.
Plus d'exemples
Chacun fonctionne de la même façon dans le champ de recherche de la fenêtre et après bws list --query, et chacun a été exécuté sur un vrai Windows avant d'être écrit ici. Ce qu'il trouve dépend de la machine - et pour une question sur les ennuis, une réponse vide est celle que vous voulez.
État et type de démarrage
| Requête | Ce qu'elle trouve |
|---|---|
status:stopPending, | Bloqués à l'arrêt ou au démarrage - l'attente que le composant enfichable affiche et qui ne finit jamais. |
start:auto status:stopped trigger:none | Réglés pour démarrer automatiquement, arrêtés, et n'attendant aucun déclencheur - la courte liste qui vaut la peine d'être lue après un redémarrage. |
start:delayed | Automatique, démarré un peu après les autres entrées automatiques. |
start:manual, | En marche bien que rien ne le démarre au démarrage de la machine - quelque chose l'a demandé, un déclencheur l'a lancé, ou quelqu'un l'a fait. |
Comptes
| Requête | Ce qu'elle trouve |
|---|---|
account:localsystem !publisher:microsoft | Tourne sous LocalSystem, le compte le plus puissant, depuis un fichier que Microsoft n'a pas signé. Une requête sur l'éditeur lit les signatures d'elle-même, elle prend donc quelques secondes. |
!account:localsystem, | Les services qui tournent sous n'importe quel autre compte - un compte virtuel, un compte géré ou celui d'une personne. |
account:"NT SERVICE" | Un compte virtuel propre au service. Les guillemets gardent les mots ensemble, à cause de l'espace. |
Fichiers et signatures
| Requête | Ce qu'elle trouve |
|---|---|
signed:notSigned, | Pas de signature, une chaîne à laquelle Windows ne fait pas confiance, ou un fichier modifié après sa signature. |
signed:trusted !publisher:microsoft | Signé, approuvé, et pas par Microsoft - les logiciels que d'autres entreprises ont mis sur cette machine. |
type:driver start:boot, | Les pilotes chargés au démarrage de Windows dont Windows n'approuve pas la signature. Sur une machine saine, aucun. |
!path:C:\Windows type:ownProcess | Un service doté de son propre processus dont le fichier se trouve hors du dossier Windows. |
path:\AppData\ | Lancé depuis l'intérieur du profil de quelqu'un, le dernier endroit où l'on s'attend à trouver un service. |
path:\System32\\ type:ownProcess | Une barre oblique inverse devant une espace fait de l'espace une partie du mot, donc un chemin se terminant par une barre oblique inverse s'écrit avec deux quand un autre terme le suit. À la fin de la requête, une suffit. |
Déclencheurs et dépendances
| Requête | Ce qu'elle trouve |
|---|---|
trigger:device status:stopped | En attente de l'arrivée d'un périphérique, donc arrêtés pour une bonne raison. |
trigger:network | Démarré quand une requête arrive sur un point de terminaison réseau - un port, un canal nommé ou une interface RPC. |
trigger:stop | Les entrées qu'un déclencheur peut arrêter, pas seulement démarrer. |
dependson:Winmgmt | Les entrées qui ont besoin de WMI pour fonctionner. |
requiredby:Spooler | Tout ce dont le spouleur d'impression a besoin pour fonctionner, et ce dont ceux-là ont besoin à leur tour. |
Privilèges et processus
| Requête | Ce qu'elle trouve |
|---|---|
privilege:SeTcbPrivilege | Demande à agir comme partie du système d'exploitation. |
privilege:SeImpersonatePrivilege !account:localsystem | Peut agir au nom d'un client tout en tournant sous un compte autre que LocalSystem. |
sidtype:unrestricted | Porte dans son processus un SID de service qui lui est propre, de sorte que les autorisations peuvent le nommer seul. sidtype:restricted interroge ceux dont le processus est en plus restreint en écriture. |
type:sharedProcess status:running | Tourne à l'intérieur d'un svchost partagé, avec d'autres. |
memory:>200MB | Un processus qui utilise plus de 200 Mo. La mémoire est lue d'elle-même quand une requête la demande. |
pid:1000-2000 | Dans un processus dont l'identifiant est compris entre 1000 et 2000. |
Noms et texte
| Requête | Ce qu'elle trouve |
|---|---|
spool | Un mot seul, recherché dans le nom, le nom affiché, le compte et le chemin de lancement. |
name:=wuauserv | Exactement ce nom, et rien qui ne fasse que le contenir. |
name:win* | Les noms qui commencent par win, écrits avec un joker. |
name:/svc$/ | Les noms qui se terminent par svc, écrits comme une expression régulière. |
description:none | Aucune description du tout, ce qui est le cas de la plupart des pilotes. |
description:? | Une description que Windows n'a pas pu fournir, le plus souvent parce qu'elle pointe vers un fichier de langue absent. |
peruser:template | Les modèles par utilisateur que Windows copie pour chaque session ouverte. |
Chaque champ
Construit depuis le programme lui-même, de sorte que ce tableau ne peut pas s'écarter de ce que l'outil accepte. Un champ sans liste de valeurs accepte du texte, un nombre ou une taille - la troisième colonne dit lequel.
| Champ | Interroge | Valeurs |
|---|---|---|
name | le nom du service, celui par lequel Windows l'identifie | texte |
display | le nom affiché, tel que ce Windows l'écrit | texte |
description | ce que l'entrée dit d'elle-même | texte |
type | quel genre d'entrée c'est | driver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown |
peruser | si c'est l'une des familles par utilisateur dont Windows fait une copie par session | yes, no, template, instance |
status | ce qu'elle fait en ce moment | running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown |
start | ce que le gestionnaire en fait au prochain démarrage | automatic, auto, delayed, manual, disabled, boot, system, unknown |
account | le compte sous lequel elle s'exécute, tel que le gestionnaire l'écrit | texte, p. ex. localsystem |
pid | le processus dans lequel elle s'exécute | un nombre : 1234, >1000, 100-200 |
trigger | une condition qui la démarre ou l'arrête | device, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop |
path | la ligne de commande que le gestionnaire lance | texte |
file | si le fichier qu'elle exécute est sur le disque | present, missing |
signed | ce que Windows pense de la signature du fichier, sans vérifier la révocation | yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown |
publisher | qui a signé le fichier - prouvé seulement par une signature approuvée | texte |
privilege | un privilège que l'entrée demande | texte, p. ex. SeDebugPrivilege |
dependson | ce dont celle-ci a besoin | un nom de service |
requiredby | ce qui cesse de fonctionner si celle-ci s'arrête | un nom de service |
sidtype | le type de SID du service | unrestricted, restricted, unknown |
sddl | le descripteur de sécurité, sous forme de texte | texte |
memory | ce que consomme son processus | une taille avec une unité : 500MB, >1GB, 100MB-1GB |
mismatch | une configuration et un état qui ne concordent pas | stopped, running |
Deux choses à savoir
Certains champs sont coûteux, et les demander active la lecture
Les signatures prennent plusieurs secondes sur toute une machine et la mémoire est une mesure plutôt qu'un réglage, donc aucune des deux n'est lue pour une liste sauf demande. Une requête qui en mentionne une active cette lecture d'elle-même - vous n'avez pas à vous souvenir de --signatures en plus de signed:no. Dans la fenêtre, une requête sur les signatures dit que la réponse est incomplète tant qu'elles n'arrivent pas, au lieu d'afficher une liste plus courte comme si c'était la réponse.
Un résultat jugé sur quelque chose d'illisible le dit
Si des entrées ont été jugées sur un champ que cette session n'a pas pu lire, le résultat porte une ligne disant combien - car un tel résultat peut manquer d'entrées, ou en contenir qui n'ont rien à y faire. C'est la même règle que respecte tout l'outil : une lecture infructueuse est visible dans la réponse, jamais avalée. Un éditeur reçoit le même traitement quand seul le certificat le prétend : à côté de tout verdict autre que trusted, le nom est affiché comme not verified, et publisher: compte l'entrée comme incertaine sur une ligne à part - de sorte que !publisher:microsoft garde un fichier Microsoft que quelqu'un a modifié après sa signature.