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ć. !przed członem neguje go:!status:running.- Przecinek wewnątrz pola znaczy albo:
start:manual,disabled. - Cudzysłowy chronią wszystko ze spacjami i dwukropkami:
account:"NT SERVICE\McmSvc".
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.- 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, 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ę.
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, 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 | yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown |
publisher | tego, kto podpisał plik | 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.