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ć.
  • Jedynym wyjątkiem jest to samo pole wpisane dwa razy: status:running status:stopped znaczy jedno albo drugie, bo tak piszą dwa zaznaczone filtry. Dwie granice liczby dalej zawężają - pid:>1000 pid:<2000 to przedział między nimi.
  • ! przed członem neguje go: !status:running. W pliku wsadowym z setlocal EnableDelayedExpansion cmd 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: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 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 jaka
  • none - 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ó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ę.

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

ZapytanieCo znajduje
status:stopPending,startPendingUtknęło na zatrzymywaniu albo uruchamianiu - oczekiwanie, które przystawka pokazuje i które się nie kończy.
start:auto status:stopped trigger:noneUstawione na start automatyczny, zatrzymane i nieczekające na wyzwalacz - krótka lista warta przeczytania po restarcie.
start:delayedAutomatyczne, uruchamiane chwilę po innych wpisach automatycznych.
start:manual,disabled status:runningDziała, choć nic nie uruchamia go przy starcie - coś o nie poprosiło, uruchomił je wyzwalacz albo ktoś ręcznie.

Konta

ZapytanieCo znajduje
account:localsystem !publisher:microsoftDział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,localservice,networkservice type:ownProcess,sharedProcessUsł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

ZapytanieCo znajduje
signed:notSigned,untrustedRoot,tamperedBez podpisu, z łańcuchem, któremu Windows nie ufa, albo plik zmieniony po podpisaniu.
signed:trusted !publisher:microsoftPodpisane, zaufane i nie przez Microsoft - oprogramowanie, które na tej maszynie położyły inne firmy.
type:driver start:boot,system !signed:trustedSterowniki ładowane przy starcie Windowsa, których podpisowi Windows nie ufa. Na zdrowej maszynie - żaden.
!path:C:\Windows type:ownProcessUsł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:ownProcessOdwrotny 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

ZapytanieCo znajduje
trigger:device status:stoppedCzeka na pojawienie się urządzenia, więc jest zatrzymane z powodu.
trigger:networkUruchamiane, gdy przychodzi żądanie do punktu końcowego sieci - portu, potoku nazwanego albo interfejsu RPC.
trigger:stopWpisy, które wyzwalacz potrafi zatrzymać, a nie tylko uruchomić.
dependson:WinmgmtWpisy, które do działania potrzebują WMI.
requiredby:SpoolerWszystko, czego bufor wydruku potrzebuje do działania, i to, czego z kolei potrzebują tamte.

Przywileje i procesy

ZapytanieCo znajduje
privilege:SeTcbPrivilegeProsi o działanie jako część systemu operacyjnego.
privilege:SeImpersonatePrivilege !account:localsystemMoże działać w imieniu klienta, choć działa na koncie innym niż LocalSystem.
sidtype:unrestrictedMa 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:runningDziała w dzielonym svchost razem z innymi.
memory:>200MBProces używający ponad 200 MB. Pamięć jest czytana sama, gdy zapytanie o nią pyta.
pid:1000-2000W procesie o identyfikatorze między 1000 a 2000.

Nazwy i tekst

ZapytanieCo znajduje
spoolGołe słowo, szukane w nazwie, nazwie wyświetlanej, koncie i ścieżce uruchomienia.
name:=wuauservDokł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:noneBez ż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:templateSzablony 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.

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, aggregate, 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 pliku, bez sprawdzania unieważnieniayes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publishertego, kto podpisał plik - potwierdzonego tylko zaufanym podpisemtekst
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. 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.

Dokumentacja wiersza poleceń