Zadaj maszynie pytanie
Jeden język, w polu wyszukiwania okna i w bws list --query. Gołe słowo szuka w nazwie, nazwie wyświetlanej, koncie i ścieżce uruchomienia. Pole zawęża. Pól jest 21, a ten sam tekst znaczy to samo w obu połowach programu.
Sześć zapytań, które odpowiadają na realne pytanie
Co powinno chodzić i nie chodzi
start:auto !status:running
Pierwsze zapytanie, które pisze większość ludzi, i to, na które services.msc nie umie odpowiedzieć w ogóle.
Usługi, których plik zniknął
file:missing
Wpis wskazujący na plik, którego nie ma na dysku. Zwykle odinstalowanie, które zostawiło po sobie rejestrację.
Niepodpisane, bez szumu sesji
signed:no peruser:no
Rodziny per-użytkownik robią kopię na sesję i zapełniają listę prawie-duplikatami. To pyta o resztę.
Działa, choć jest wyłączone
mismatch:running
Konfiguracja i stan się nie zgadzają - wpis, którego menedżer ma nigdy nie uruchamiać, działający mimo to.
Cokolwiek prosi o prawa debugowania
privilege:SeDebugPrivilege
Przywilej, który pozwala procesowi otworzyć dowolny inny. Warto wiedzieć, które usługi o niego proszą.
Czego program nie zdołał odczytać
account:?
Wpisy, na których ta sesja nie odczytała konta. Pytanie, którego services.msc nie umie nawet zadać.
Jak pisze się zapytanie
Człony
- Człony rozdziela spacja i wszystkie muszą pasować - nie ma słowa
and, bo nic innego nie mogłoby to znaczyć. - Jedynym wyjątkiem jest to samo pole wpisane dwa razy:
status:running status:stoppedznaczy jedno albo drugie, bo tak piszą dwa zaznaczone filtry. Dwie granice liczby dalej zawężają -pid:>1000 pid:<2000to przedział między nimi. !przed członem neguje go:!status:running. W pliku wsadowym zsetlocal EnableDelayedExpansioncmd zjada ten!bez słowa i zapytanie po cichu znaczy co innego - pisz tam^!wewnątrz cudzysłowu.- Przecinek wewnątrz pola znaczy albo:
start:manual,disabled. - Cudzysłowy chronią wszystko ze spacjami i dwukropkami:
account:"NT SERVICE\McmSvc". - Ścieżka wklejona tak, jak jest -
C:\Windows\System32\svchost.exe- jest szukana, a nie czytana jako pole o nazwie C.
Jak dopasowuje się tekst
name:spoolpasuje do wszystkiego, co zawiera ten tekst - domyślnie, bo tego ludzie oczekują od pola wyszukiwania.name:=spoolerto dopasowanie dokładne.name:spool*przyjmuje symbole wieloznaczne,*i?.name:/^Sql.*/to wyrażenie regularne i między ukośnikami pisze się je tak, jak wyrażenia regularne:\?,\\i przecinek znaczą to, co tam. Ukośnik, który się nie zamyka, jest błędem - żeby szukać samego ukośnika, napisz\/albo użyj cudzysłowu.- Wielkość liter jest ignorowana, także poza ASCII - polska nazwa wyświetlana pasuje niezależnie od tego, jak ją wpiszesz.
Trzy słowa, które przyjmuje każde pole
any- jest jakaś wartość, obojętnie jakanone- wartości naprawdę nie ma - wpis jej nie ma?- narzędzie nie zdołało odczytać tego pola albo go nie odczytało, czyli pytanie, któregoservices.mscnie umie nawet zadać
Literówka w wartości jest błędem, nigdy pustym wynikiem. status:runing odpowiada Did you mean running? i kończy kodem 2. Pusta lista wyglądałaby jak odpowiedź, a różnica między „nic nie pasuje" a „źle to wpisałeś" jest różnicą między czystą maszyną a audytem, który niczego nie dowiódł. Zapytanie, które niczego by nie zawęziło, jest w wierszu poleceń odrzucane, żeby skrypt nie zadziałał na całej maszynie przez literówkę.
Więcej przykładów
Każde działa tak samo w polu wyszukiwania okna i po bws list --query, a każde uruchomiono na prawdziwym Windowsie, zanim tu trafiło. To, co znajdzie, zależy od maszyny - a przy pytaniu o kłopot pusta odpowiedź jest tą, której chcesz.
Stan i typ uruchomienia
| Zapytanie | Co znajduje |
|---|---|
status:stopPending, | Utknęło na zatrzymywaniu albo uruchamianiu - oczekiwanie, które przystawka pokazuje i które się nie kończy. |
start:auto status:stopped trigger:none | Ustawione na start automatyczny, zatrzymane i nieczekające na wyzwalacz - krótka lista warta przeczytania po restarcie. |
start:delayed | Automatyczne, uruchamiane chwilę po innych wpisach automatycznych. |
start:manual, | Działa, choć nic nie uruchamia go przy starcie - coś o nie poprosiło, uruchomił je wyzwalacz albo ktoś ręcznie. |
Konta
| Zapytanie | Co znajduje |
|---|---|
account:localsystem !publisher:microsoft | Działa jako LocalSystem, najsilniejsze konto, z pliku, którego nie podpisał Microsoft. Zapytanie o wydawcę samo czyta podpisy, więc trwa kilka sekund. |
!account:localsystem, | Usługi działające na każdym innym koncie - wirtualnym, zarządzanym albo czyimś własnym. |
account:"NT SERVICE" | Własne konto wirtualne usługi. Cudzysłów trzyma słowa razem, bo jest między nimi spacja. |
Pliki i podpisy
| Zapytanie | Co znajduje |
|---|---|
signed:notSigned, | Bez podpisu, z łańcuchem, któremu Windows nie ufa, albo plik zmieniony po podpisaniu. |
signed:trusted !publisher:microsoft | Podpisane, zaufane i nie przez Microsoft - oprogramowanie, które na tej maszynie położyły inne firmy. |
type:driver start:boot, | Sterowniki ładowane przy starcie Windowsa, których podpisowi Windows nie ufa. Na zdrowej maszynie - żaden. |
!path:C:\Windows type:ownProcess | Usługa z własnym procesem, której plik leży poza folderem Windows. |
path:\AppData\ | Uruchamiana z wnętrza czyjegoś profilu, ostatniego miejsca, w którym spodziewa się usługi. |
path:\System32\\ type:ownProcess | Odwrotny ukośnik przed spacją czyni spację częścią słowa, więc ścieżkę kończącą się ukośnikiem pisze się z dwoma, gdy idzie po niej kolejny człon. Na końcu zapytania wystarczy jeden. |
Wyzwalacze i zależności
| Zapytanie | Co znajduje |
|---|---|
trigger:device status:stopped | Czeka na pojawienie się urządzenia, więc jest zatrzymane z powodu. |
trigger:network | Uruchamiane, gdy przychodzi żądanie do punktu końcowego sieci - portu, potoku nazwanego albo interfejsu RPC. |
trigger:stop | Wpisy, które wyzwalacz potrafi zatrzymać, a nie tylko uruchomić. |
dependson:Winmgmt | Wpisy, które do działania potrzebują WMI. |
requiredby:Spooler | Wszystko, czego bufor wydruku potrzebuje do działania, i to, czego z kolei potrzebują tamte. |
Przywileje i procesy
| Zapytanie | Co znajduje |
|---|---|
privilege:SeTcbPrivilege | Prosi o działanie jako część systemu operacyjnego. |
privilege:SeImpersonatePrivilege !account:localsystem | Może działać w imieniu klienta, choć działa na koncie innym niż LocalSystem. |
sidtype:unrestricted | Ma w procesie własny SID usługi, więc uprawnienia mogą wskazać tylko ją. sidtype:restricted pyta o te, których proces jest dodatkowo ograniczony do zapisu. |
type:sharedProcess status:running | Działa w dzielonym svchost razem z innymi. |
memory:>200MB | Proces używający ponad 200 MB. Pamięć jest czytana sama, gdy zapytanie o nią pyta. |
pid:1000-2000 | W procesie o identyfikatorze między 1000 a 2000. |
Nazwy i tekst
| Zapytanie | Co znajduje |
|---|---|
spool | Gołe słowo, szukane w nazwie, nazwie wyświetlanej, koncie i ścieżce uruchomienia. |
name:=wuauserv | Dokładnie ta nazwa, a nie wszystko, co ją zawiera. |
name:win* | Nazwy zaczynające się od win, zapisane symbolem wieloznacznym. |
name:/svc$/ | Nazwy kończące się na svc, zapisane jako wyrażenie regularne. |
description:none | Bez żadnego opisu - tak ma większość sterowników. |
description:? | Opis, którego Windows nie zdołał wydać, zwykle dlatego, że wskazuje na plik językowy, którego nie ma. |
peruser:template | Szablony per-użytkownik, które Windows kopiuje dla każdej zalogowanej sesji. |
Wszystkie pola
Ta tabela jest zbudowana z samego programu, więc nie może rozjechać się z tym, co narzędzie przyjmuje. Pole bez listy wartości przyjmuje tekst, liczbę albo rozmiar - trzecia kolumna mówi, który z nich.
| Pole | Pyta o | Wartości |
|---|---|---|
name | nazwę usługi, tę, po której identyfikuje ją Windows | tekst |
display | nazwę wyświetlaną, tak jak pisze ją ten Windows | tekst |
description | to, co wpis mówi o sobie sam | tekst |
type | rodzaj wpisu | driver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown |
peruser | czy to jedna z rodzin per-użytkownik, których Windows robi kopię na sesję | yes, no, template, instance |
status | to, co wpis robi w tej chwili | running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown |
start | to, co menedżer zrobi z wpisem przy następnym starcie systemu | automatic, auto, delayed, manual, disabled, boot, system, unknown |
account | konto, na którym działa, tak jak pisze je menedżer | tekst, np. localsystem |
pid | proces, w którym działa | liczba: 1234, >1000, 100-200 |
trigger | warunek, który go uruchamia albo zatrzymuje | device, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop |
path | wiersz poleceń, którym uruchamia go menedżer | tekst |
file | czy uruchamiany plik jest na dysku | present, missing |
signed | to, co Windows sądzi o podpisie pliku, bez sprawdzania unieważnienia | yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown |
publisher | tego, kto podpisał plik - potwierdzonego tylko zaufanym podpisem | tekst |
privilege | przywilej, o który wpis prosi | tekst, np. SeDebugPrivilege |
dependson | to, czego ten wpis potrzebuje | nazwa usługi |
requiredby | to, co przestanie działać, gdy ten wpis się zatrzyma | nazwa usługi |
sidtype | typ SID usługi | unrestricted, restricted, unknown |
sddl | deskryptor bezpieczeństwa, jako tekst | tekst |
memory | to, ile zajmuje jego proces | rozmiar z jednostką: 500MB, >1GB, 100MB-1GB |
mismatch | konfigurację i stan, które się nie zgadzają | stopped, running |
Dwie rzeczy warte wiedzenia
Część pól jest droga, a zapytanie o nie włącza ich odczyt
Podpisy trwają na całej maszynie kilka sekund, a pamięć jest pomiarem, a nie ustawieniem, więc żadne z nich nie jest czytane dla zwykłej listy. Zapytanie, które o nie pyta, włącza ten odczyt samo - nie trzeba pamiętać o --signatures obok signed:no. W oknie zapytanie o podpisy mówi, że odpowiedź jest niepełna, dopóki nie dotrą, zamiast pokazywać krótszą listę jak gotowy wynik.
Wynik oceniony na czymś nieodczytanym mówi to wprost
Jeśli wpisy były oceniane po polu, którego ta sesja nie zdołała odczytać, wynik niesie linię mówiącą ile - bo taki wynik może gubić wpisy albo trzymać takie, które do niego nie należą. To ta sama reguła, którą trzyma cały program: nieudany odczyt jest widoczny w odpowiedzi, nigdy połknięty. Tak samo traktowany jest wydawca, którego deklaruje tylko certyfikat: przy werdykcie innym niż trusted nazwa ma dopisek not verified, a publisher: liczy taki wpis jako niepewny, we własnej linii - więc !publisher:microsoft zostawia plik Microsoftu zmieniony po podpisaniu.