Die Abfragesprache

Stellen Sie dem Rechner eine Frage

Eine Sprache, im Suchfeld des Fensters und in bws list --query. Ein einzelnes Wort durchsucht den Namen, den Anzeigenamen, das Konto und den Startpfad. Ein Feld grenzt es ein. 21 Felder, und derselbe Text bedeutet in beiden Hälften des Werkzeugs dasselbe.

Sechs, die eine echte Frage beantworten

Was laufen sollte und nicht läuft

start:auto !status:running

Die erste Abfrage, die die meisten schreiben, und die, die services.msc überhaupt nicht beantworten kann.

Dienste, deren Datei fehlt

file:missing

Ein Eintrag, der auf eine Programmdatei zeigt, die nicht auf dem Datenträger liegt. Meist eine Deinstallation, die die Registrierung zurückgelassen hat.

Unsigniert, ohne das Rauschen der Sitzungen

signed:no peruser:no

Die Familien pro Benutzer machen eine Kopie je Sitzung und füllen eine Liste mit Beinahe-Dubletten. Das hier fragt nach dem Rest.

Läuft, obwohl deaktiviert

mismatch:running

Konfiguration und Zustand, die nicht zusammenpassen - ein Eintrag, den der Manager nie starten soll, läuft trotzdem.

Alles, was Debugrechte verlangt

privilege:SeDebugPrivilege

Ein Privileg, mit dem ein Prozess jeden anderen öffnen kann. Es lohnt sich zu wissen, welche Dienste es verlangen.

Was das Werkzeug nicht lesen konnte

account:?

Die Einträge, bei denen diese Sitzung das Konto nicht lesen konnte. Eine Frage, die services.msc nicht einmal stellen kann.

Wie eine Abfrage geschrieben wird

Begriffe

  • Begriffe werden durch Leerzeichen getrennt, und alle müssen zutreffen - es gibt kein Schlüsselwort and, weil es nichts anderes bedeuten könnte.
  • Dasselbe Feld zweimal geschrieben ist die einzige Ausnahme: status:running status:stopped bedeutet das eine oder das andere, weil das geschrieben wird, wenn man zwei Filter anhakt. Zwei Grenzen bei einer Zahl grenzen dagegen weiter ein - pid:>1000 pid:<2000 ist der Bereich dazwischen.
  • ! vor einem Begriff verneint ihn: !status:running. In einer Batchdatei mit setlocal EnableDelayedExpansion frisst cmd dieses ! wortlos, und die Abfrage bedeutet stillschweigend etwas anderes - schreiben Sie dort ^! innerhalb der Anführungszeichen.
  • Ein Komma innerhalb eines Feldes ist ein oder: start:manual,disabled.
  • Anführungszeichen schützen alles mit Leerzeichen oder Doppelpunkten: account:"NT SERVICE\McmSvc".
  • Ein so eingefügter Pfad - C:\Windows\System32\svchost.exe - wird gesucht und nicht als Feld namens C gelesen.

Wie Text verglichen wird

  • name:spool trifft alles, was es enthält - der Standard, weil das ist, was man von einem Suchfeld erwartet.
  • name:=spooler ist genau.
  • name:spool* nimmt Platzhalter, * und ?.
  • name:/^Sql.*/ ist ein regulärer Ausdruck und wird innerhalb der Schrägstriche so geschrieben, wie reguläre Ausdrücke geschrieben werden: \?, \\ und ein Komma bedeuten dort, was sie dort bedeuten. Ein Schrägstrich, der nie schließt, ist ein Fehler - um nach dem Schrägstrich selbst zu suchen, schreiben Sie \/ oder nehmen Anführungszeichen.
  • Groß- und Kleinschreibung wird ignoriert, auch außerhalb von ASCII - ein Anzeigename auf Polnisch oder Griechisch trifft, wie auch immer er getippt wird.

Drei Wörter, die jedes Feld akzeptiert

  • any - es gibt einen Wert, egal welchen
  • none - es gibt wirklich keinen Wert - der Eintrag hat keinen
  • ? - das Werkzeug konnte dieses Feld nicht lesen oder hat es nicht gelesen, und das ist eine Frage, die services.msc nicht einmal stellen kann

Ein falsch getippter Wert ist ein Fehler, nie ein leeres Ergebnis. status:runing antwortet Did you mean running? und endet mit Code 2. Eine leere Liste sähe wie eine Antwort aus, und der Unterschied zwischen "nichts trifft zu" und "Sie haben sich vertippt" ist der Unterschied zwischen einem sauberen Rechner und einem Audit, das nichts bewiesen hat. Eine Abfrage, die nichts eingrenzen würde, wird auch auf der Befehlszeile abgelehnt, damit ein Skript wegen eines Tippfehlers nicht auf dem ganzen Rechner arbeitet.

Weitere Beispiele

Jedes funktioniert im Suchfeld des Fensters genauso wie nach bws list --query, und jedes wurde auf einem echten Windows ausgeführt, bevor es hier geschrieben wurde. Was es findet, hängt vom Rechner ab - und bei einer Frage nach Ärger ist eine leere Antwort die, die Sie sich wünschen.

Zustand und Starttyp

AbfrageWas sie findet
status:stopPending,startPendingHängt beim Beenden oder Starten - das Warten, das das Snap-in anzeigt und das nie endet.
start:auto status:stopped trigger:noneAuf automatischen Start gesetzt, beendet und ohne Wartezeit auf einen Trigger - die kurze Liste, die nach einem Neustart lesenswert ist.
start:delayedAutomatisch, aber etwas nach den anderen automatischen Einträgen gestartet.
start:manual,disabled status:runningLäuft, obwohl nichts es beim Hochfahren startet - etwas hat es angefordert, ein Trigger hat es gestartet, oder jemand hat es getan.

Konten

AbfrageWas sie findet
account:localsystem !publisher:microsoftLäuft als LocalSystem, dem stärksten Konto, aus einer Datei, die Microsoft nicht signiert hat. Eine Abfrage zum Herausgeber liest Signaturen von selbst, daher dauert sie einige Sekunden.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessDienste, die unter irgendeinem anderen Konto laufen - einem virtuellen, einem verwalteten oder dem einer Person.
account:"NT SERVICE"Ein virtuelles Konto des Dienstes selbst. Die Anführungszeichen halten die Wörter wegen des Leerzeichens zusammen.

Dateien und Signaturen

AbfrageWas sie findet
signed:notSigned,untrustedRoot,tamperedKeine Signatur, eine Kette, der Windows nicht vertraut, oder eine Datei, die nach dem Signieren verändert wurde.
signed:trusted !publisher:microsoftSigniert, vertrauenswürdig und nicht von Microsoft - die Software, die andere Firmen auf diesen Rechner gebracht haben.
type:driver start:boot,system !signed:trustedTreiber, die beim Windows-Start geladen werden und deren Signatur Windows nicht vertraut. Auf einem gesunden Rechner keine.
!path:C:\Windows type:ownProcessEin Dienst mit eigenem Prozess, dessen Datei außerhalb des Windows-Ordners liegt.
path:\AppData\Gestartet aus dem Profil von jemandem, dem letzten Ort, an dem man einen Dienst erwartet.
path:\System32\\ type:ownProcessEin Backslash vor einem Leerzeichen macht das Leerzeichen zum Teil des Wortes, daher wird ein Pfad, der auf einen Backslash endet, mit zwei geschrieben, wenn ein weiterer Begriff folgt. Am Ende der Abfrage genügt einer.

Trigger und Abhängigkeiten

AbfrageWas sie findet
trigger:device status:stoppedWartet darauf, dass ein Gerät erscheint, ist also aus gutem Grund beendet.
trigger:networkGestartet, wenn eine Anfrage an einem Netzwerkendpunkt eintrifft - einem Port, einer benannten Pipe oder einer RPC-Schnittstelle.
trigger:stopEinträge, die ein Trigger auch beenden kann, nicht nur starten.
dependson:WinmgmtEinträge, die WMI zum Laufen brauchen.
requiredby:SpoolerAlles, was der Druckerspooler zum Laufen braucht, und was jene wiederum brauchen.

Privilegien und Prozesse

AbfrageWas sie findet
privilege:SeTcbPrivilegeVerlangt, als Teil des Betriebssystems zu handeln.
privilege:SeImpersonatePrivilege !account:localsystemKann im Namen eines Clients handeln, während es unter einem anderen Konto als LocalSystem läuft.
sidtype:unrestrictedTrägt in seinem Prozess eine eigene Dienst-SID, sodass Berechtigungen es allein benennen können. sidtype:restricted fragt nach denen, deren Prozess zusätzlich schreibbeschränkt ist.
type:sharedProcess status:runningLäuft in einem gemeinsamen svchost, zusammen mit anderen.
memory:>200MBEin Prozess, der mehr als 200 MB nutzt. Der Speicher wird von selbst gelesen, wenn eine Abfrage danach fragt.
pid:1000-2000In einem Prozess, dessen ID zwischen 1000 und 2000 liegt.

Namen und Text

AbfrageWas sie findet
spoolEin einzelnes Wort, gesucht im Namen, im Anzeigenamen, im Konto und im Startpfad.
name:=wuauservGenau dieser Name und nichts, was ihn nur enthält.
name:win*Namen, die mit win beginnen, mit einem Platzhalter geschrieben.
name:/svc$/Namen, die auf svc enden, als regulärer Ausdruck geschrieben.
description:noneÜberhaupt keine Beschreibung, was bei den meisten Treibern der Fall ist.
description:?Eine Beschreibung, die Windows nicht herausgeben konnte, meist weil sie auf eine Sprachdatei zeigt, die nicht da ist.
peruser:templateDie Vorlagen pro Benutzer, die Windows für jede angemeldete Sitzung kopiert.

Jedes Feld

Aus dem Programm selbst gebaut, sodass diese Tabelle nicht von dem abweichen kann, was das Werkzeug akzeptiert. Ein Feld ohne Werteliste nimmt Text, eine Zahl oder eine Größe - die dritte Spalte sagt, welches.

FeldFragt nachWerte
nameder Dienstname, unter dem Windows ihn kenntText
displayder Anzeigename, wie dieses Windows ihn schreibtText
descriptionwas der Eintrag über sich selbst sagtText
typewas für ein Eintrag es istdriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserob es eine der Familien pro Benutzer ist, von denen Windows je Sitzung eine Kopie anlegtyes, no, template, instance
statuswas er gerade tutrunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startwas der Manager beim nächsten Start mit ihm tutautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountdas Konto, unter dem er läuft, wie der Manager es schreibtText, z. B. localsystem
pidder Prozess, in dem er läufteine Zahl: 1234, >1000, 100-200
triggereine Bedingung, die ihn startet oder beendetdevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathdie Befehlszeile, die der Manager startetText
fileob die Datei, die er ausführt, auf dem Datenträger liegtpresent, missing
signedwas Windows von der Signatur der Datei hält, ohne die Sperrung zu prüfenyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherwer die Datei signiert hat - nur durch eine vertrauenswürdige Signatur bewiesenText
privilegeein Privileg, das der Eintrag verlangtText, z. B. SeDebugPrivilege
dependsonwas dieser brauchtein Dienstname
requiredbywas ausfällt, wenn dieser anhältein Dienstname
sidtypeder Typ der Dienst-SIDunrestricted, restricted, unknown
sddlder Sicherheitsdeskriptor als TextText
memorywas sein Prozess verbrauchteine Größe mit Einheit: 500MB, >1GB, 100MB-1GB
mismatchKonfiguration und Zustand, die nicht zusammenpassenstopped, running

Zwei Dinge, die man wissen sollte

Manche Felder sind teuer, und wer nach ihnen fragt, schaltet das Lesen ein

Signaturen brauchen über einen ganzen Rechner mehrere Sekunden, und der Speicher ist eine Messung und keine Einstellung, daher wird keines von beiden für eine Liste gelesen, wenn nicht danach gefragt wird. Eine Abfrage, die eines erwähnt, schaltet dieses Lesen von selbst ein - Sie müssen sich nicht zusätzlich zu signed:no noch --signatures merken. Im Fenster sagt eine Abfrage zu Signaturen, dass die Antwort unvollständig ist, bis sie eintreffen, statt eine kürzere Liste so zu zeigen, als wäre sie die Antwort.

Ein Ergebnis, das nach etwas Unlesbarem beurteilt wurde, sagt das

Wenn Einträge nach einem Feld beurteilt wurden, das diese Sitzung nicht lesen konnte, trägt das Ergebnis eine Zeile mit der Anzahl - denn ein solches Ergebnis kann Einträge vermissen oder welche enthalten, die nicht hineingehören. Das ist dieselbe Regel, die das ganze Werkzeug einhält: ein erfolgloses Lesen ist in der Antwort sichtbar und wird nie verschluckt. Ein Herausgeber wird genauso behandelt, wenn nur das Zertifikat ihn behauptet: neben jedem anderen Urteil als trusted wird der Name als not verified gezeigt, und publisher: zählt den Eintrag in einer eigenen Zeile als unsicher - so behält !publisher:microsoft eine Microsoft-Datei, die jemand nach dem Signieren verändert hat.

Die Referenz der Befehlszeile