Język zapytań

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:spool pasuje do wszystkiego, co zawiera ten tekst - domyślnie, bo tego ludzie oczekują od pola wyszukiwania.
  • name:=spooler to 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 jaka
  • none - wartości naprawdę nie ma - wpis jej nie ma
  • ? - narzędzie nie zdołało odczytać tego pola, czyli pytanie, którego services.msc nie 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.

PolePyta oWartości
namenazwę usługi, tę, po której identyfikuje ją Windowstekst
displaynazwę wyświetlaną, tak jak pisze ją ten Windowstekst
descriptionto, co wpis mówi o sobie samtekst
typerodzaj wpisudriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserczy to jedna z rodzin per-użytkownik, których Windows robi kopię na sesjęyes, no, template, instance
statusto, co wpis robi w tej chwilirunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startto, co menedżer zrobi z wpisem przy następnym starcie systemuautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountkonto, na którym działa, tak jak pisze je menedżertekst, np. localsystem
pidproces, w którym działaliczba: 1234, >1000, 100-200
triggerwarunek, który go uruchamia albo zatrzymujedevice, ip, domain, firewall, policy, network, custom, state, unknown, start, stop
pathwiersz poleceń, którym uruchamia go menedżertekst
fileczy uruchamiany plik jest na dyskupresent, missing
signedto, co Windows sądzi o podpisie plikuyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publishertego, kto podpisał pliktekst
privilegeprzywilej, o który wpis prositekst, np. SeDebugPrivilege
dependsonto, czego ten wpis potrzebujenazwa usługi
requiredbyto, co przestanie działać, gdy ten wpis się zatrzymanazwa usługi
sidtypetyp SID usługiunrestricted, restricted, unknown
sddldeskryptor bezpieczeństwa, jako teksttekst
memoryto, ile zajmuje jego procesrozmiar z jednostką: 500MB, >1GB, 100MB-1GB
mismatchkonfigurację 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.

Dokumentacja wiersza poleceń