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:stoppedbedeutet 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:<2000ist der Bereich dazwischen. !vor einem Begriff verneint ihn:!status:running. In einer Batchdatei mitsetlocal EnableDelayedExpansionfrisst 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:spooltrifft alles, was es enthält - der Standard, weil das ist, was man von einem Suchfeld erwartet.name:=spoolerist 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 welchennone- 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, dieservices.mscnicht 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
| Abfrage | Was sie findet |
|---|---|
status:stopPending, | Hängt beim Beenden oder Starten - das Warten, das das Snap-in anzeigt und das nie endet. |
start:auto status:stopped trigger:none | Auf automatischen Start gesetzt, beendet und ohne Wartezeit auf einen Trigger - die kurze Liste, die nach einem Neustart lesenswert ist. |
start:delayed | Automatisch, aber etwas nach den anderen automatischen Einträgen gestartet. |
start:manual, | Läuft, obwohl nichts es beim Hochfahren startet - etwas hat es angefordert, ein Trigger hat es gestartet, oder jemand hat es getan. |
Konten
| Abfrage | Was sie findet |
|---|---|
account:localsystem !publisher:microsoft | Lä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, | Dienste, 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
| Abfrage | Was sie findet |
|---|---|
signed:notSigned, | Keine Signatur, eine Kette, der Windows nicht vertraut, oder eine Datei, die nach dem Signieren verändert wurde. |
signed:trusted !publisher:microsoft | Signiert, vertrauenswürdig und nicht von Microsoft - die Software, die andere Firmen auf diesen Rechner gebracht haben. |
type:driver start:boot, | Treiber, die beim Windows-Start geladen werden und deren Signatur Windows nicht vertraut. Auf einem gesunden Rechner keine. |
!path:C:\Windows type:ownProcess | Ein 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:ownProcess | Ein 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
| Abfrage | Was sie findet |
|---|---|
trigger:device status:stopped | Wartet darauf, dass ein Gerät erscheint, ist also aus gutem Grund beendet. |
trigger:network | Gestartet, wenn eine Anfrage an einem Netzwerkendpunkt eintrifft - einem Port, einer benannten Pipe oder einer RPC-Schnittstelle. |
trigger:stop | Einträge, die ein Trigger auch beenden kann, nicht nur starten. |
dependson:Winmgmt | Einträge, die WMI zum Laufen brauchen. |
requiredby:Spooler | Alles, was der Druckerspooler zum Laufen braucht, und was jene wiederum brauchen. |
Privilegien und Prozesse
| Abfrage | Was sie findet |
|---|---|
privilege:SeTcbPrivilege | Verlangt, als Teil des Betriebssystems zu handeln. |
privilege:SeImpersonatePrivilege !account:localsystem | Kann im Namen eines Clients handeln, während es unter einem anderen Konto als LocalSystem läuft. |
sidtype:unrestricted | Trä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:running | Läuft in einem gemeinsamen svchost, zusammen mit anderen. |
memory:>200MB | Ein Prozess, der mehr als 200 MB nutzt. Der Speicher wird von selbst gelesen, wenn eine Abfrage danach fragt. |
pid:1000-2000 | In einem Prozess, dessen ID zwischen 1000 und 2000 liegt. |
Namen und Text
| Abfrage | Was sie findet |
|---|---|
spool | Ein einzelnes Wort, gesucht im Namen, im Anzeigenamen, im Konto und im Startpfad. |
name:=wuauserv | Genau 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:template | Die 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.
| Feld | Fragt nach | Werte |
|---|---|---|
name | der Dienstname, unter dem Windows ihn kennt | Text |
display | der Anzeigename, wie dieses Windows ihn schreibt | Text |
description | was der Eintrag über sich selbst sagt | Text |
type | was für ein Eintrag es ist | driver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown |
peruser | ob es eine der Familien pro Benutzer ist, von denen Windows je Sitzung eine Kopie anlegt | yes, no, template, instance |
status | was er gerade tut | running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown |
start | was der Manager beim nächsten Start mit ihm tut | automatic, auto, delayed, manual, disabled, boot, system, unknown |
account | das Konto, unter dem er läuft, wie der Manager es schreibt | Text, z. B. localsystem |
pid | der Prozess, in dem er läuft | eine Zahl: 1234, >1000, 100-200 |
trigger | eine Bedingung, die ihn startet oder beendet | device, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop |
path | die Befehlszeile, die der Manager startet | Text |
file | ob die Datei, die er ausführt, auf dem Datenträger liegt | present, missing |
signed | was Windows von der Signatur der Datei hält, ohne die Sperrung zu prüfen | yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown |
publisher | wer die Datei signiert hat - nur durch eine vertrauenswürdige Signatur bewiesen | Text |
privilege | ein Privileg, das der Eintrag verlangt | Text, z. B. SeDebugPrivilege |
dependson | was dieser braucht | ein Dienstname |
requiredby | was ausfällt, wenn dieser anhält | ein Dienstname |
sidtype | der Typ der Dienst-SID | unrestricted, restricted, unknown |
sddl | der Sicherheitsdeskriptor als Text | Text |
memory | was sein Prozess verbraucht | eine Größe mit Einheit: 500MB, >1GB, 100MB-1GB |
mismatch | Konfiguration und Zustand, die nicht zusammenpassen | stopped, 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.