Le langage de requête

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é and parce qu'il ne pourrait rien signifier d'autre.
  • Le même champ écrit deux fois est la seule exception : status:running status:stopped veut 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:<2000 est l'intervalle entre elles.
  • ! devant un terme le nie : !status:running. Dans un fichier batch avec setlocal 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:spool trouve tout ce qui le contient - le comportement par défaut, car c'est ce qu'on attend d'un champ de recherche.
  • name:=spooler est 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 soit
  • none - 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 que services.msc ne 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êteCe qu'elle trouve
status:stopPending,startPendingBloqué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:noneRé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:delayedAutomatique, démarré un peu après les autres entrées automatiques.
start:manual,disabled status:runningEn 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êteCe qu'elle trouve
account:localsystem !publisher:microsoftTourne 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,localservice,networkservice type:ownProcess,sharedProcessLes 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êteCe qu'elle trouve
signed:notSigned,untrustedRoot,tamperedPas de signature, une chaîne à laquelle Windows ne fait pas confiance, ou un fichier modifié après sa signature.
signed:trusted !publisher:microsoftSigné, approuvé, et pas par Microsoft - les logiciels que d'autres entreprises ont mis sur cette machine.
type:driver start:boot,system !signed:trustedLes pilotes chargés au démarrage de Windows dont Windows n'approuve pas la signature. Sur une machine saine, aucun.
!path:C:\Windows type:ownProcessUn 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:ownProcessUne 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êteCe qu'elle trouve
trigger:device status:stoppedEn attente de l'arrivée d'un périphérique, donc arrêtés pour une bonne raison.
trigger:networkDémarré quand une requête arrive sur un point de terminaison réseau - un port, un canal nommé ou une interface RPC.
trigger:stopLes entrées qu'un déclencheur peut arrêter, pas seulement démarrer.
dependson:WinmgmtLes entrées qui ont besoin de WMI pour fonctionner.
requiredby:SpoolerTout ce dont le spouleur d'impression a besoin pour fonctionner, et ce dont ceux-là ont besoin à leur tour.

Privilèges et processus

RequêteCe qu'elle trouve
privilege:SeTcbPrivilegeDemande à agir comme partie du système d'exploitation.
privilege:SeImpersonatePrivilege !account:localsystemPeut agir au nom d'un client tout en tournant sous un compte autre que LocalSystem.
sidtype:unrestrictedPorte 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:runningTourne à l'intérieur d'un svchost partagé, avec d'autres.
memory:>200MBUn processus qui utilise plus de 200 Mo. La mémoire est lue d'elle-même quand une requête la demande.
pid:1000-2000Dans un processus dont l'identifiant est compris entre 1000 et 2000.

Noms et texte

RequêteCe qu'elle trouve
spoolUn mot seul, recherché dans le nom, le nom affiché, le compte et le chemin de lancement.
name:=wuauservExactement 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:noneAucune 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:templateLes 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.

ChampInterrogeValeurs
namele nom du service, celui par lequel Windows l'identifietexte
displayle nom affiché, tel que ce Windows l'écrittexte
descriptionce que l'entrée dit d'elle-mêmetexte
typequel genre d'entrée c'estdriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
perusersi c'est l'une des familles par utilisateur dont Windows fait une copie par sessionyes, no, template, instance
statusce qu'elle fait en ce momentrunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startce que le gestionnaire en fait au prochain démarrageautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountle compte sous lequel elle s'exécute, tel que le gestionnaire l'écrittexte, p. ex. localsystem
pidle processus dans lequel elle s'exécuteun nombre : 1234, >1000, 100-200
triggerune condition qui la démarre ou l'arrêtedevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathla ligne de commande que le gestionnaire lancetexte
filesi le fichier qu'elle exécute est sur le disquepresent, missing
signedce que Windows pense de la signature du fichier, sans vérifier la révocationyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherqui a signé le fichier - prouvé seulement par une signature approuvéetexte
privilegeun privilège que l'entrée demandetexte, p. ex. SeDebugPrivilege
dependsonce dont celle-ci a besoinun nom de service
requiredbyce qui cesse de fonctionner si celle-ci s'arrêteun nom de service
sidtypele type de SID du serviceunrestricted, restricted, unknown
sddlle descripteur de sécurité, sous forme de textetexte
memoryce que consomme son processusune taille avec une unité : 500MB, >1GB, 100MB-1GB
mismatchune configuration et un état qui ne concordent passtopped, 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.

La référence de la ligne de commande