Dotazovací jazyk

Položte stroji otázku

Jeden jazyk, ve vyhledávacím poli okna i v bws list --query. Samotné slovo hledá v názvu, zobrazovaném názvu, účtu a cestě ke spuštění. Pole ho zúží. 21 polí a stejný text znamená v obou polovinách nástroje totéž.

Šest, které odpovídají na skutečnou otázku

Co by mělo běžet a neběží

start:auto !status:running

První dotaz, který většina lidí napíše, a ten, na který services.msc neumí odpovědět vůbec.

Služby, jejichž soubor je pryč

file:missing

Položka ukazující na spustitelný soubor, který na disku není. Obvykle odinstalace, která po sobě nechala registraci.

Nepodepsané, bez šumu z relací

signed:no peruser:no

Rodiny pro jednotlivé uživatele vytvářejí kopii pro každou relaci a plní seznam téměř duplikáty. Tohle se ptá na zbytek.

Běží, ačkoli je zakázáno

mismatch:running

Konfigurace a stav, které si odporují - položka, kterou má správce nastavenou, aby se nikdy nespustila, a přesto běží.

Cokoli, co žádá o práva ladění

privilege:SeDebugPrivilege

Privilegium, které procesu umožňuje otevřít jakýkoli jiný. Stojí za to vědět, které služby o něj žádají.

Co nástroj nemohl přečíst

account:?

Položky, u kterých tato relace nemohla přečíst účet. Otázka, kterou services.msc neumí ani položit.

Jak se dotaz píše

Termíny

  • Termíny se oddělují mezerami a musí platit všechny - klíčové slovo and neexistuje, protože by nemohlo znamenat nic jiného.
  • Totéž pole napsané dvakrát je jediná výjimka: status:running status:stopped znamená jedno nebo druhé, protože přesně to zapíše zaškrtnutí dvou filtrů. Dvě meze čísla stále zužují - pid:>1000 pid:<2000 je rozsah mezi nimi.
  • ! před termínem ho neguje: !status:running. V dávkovém souboru s setlocal EnableDelayedExpansion cmd tento ! beze slova sní a dotaz pak tiše znamená něco jiného - tam napište ^! uvnitř uvozovek.
  • Čárka uvnitř pole je nebo: start:manual,disabled.
  • Uvozovky chrání vše s mezerami nebo dvojtečkami: account:"NT SERVICE\McmSvc".
  • Cesta vložená tak, jak je - C:\Windows\System32\svchost.exe - se hledá, ne čte jako pole s názvem C.

Jak se porovnává text

  • name:spool odpovídá všemu, co to obsahuje - výchozí chování, protože to lidé od vyhledávacího pole čekají.
  • name:=spooler je přesná shoda.
  • name:spool* bere zástupné znaky, * a ?.
  • name:/^Sql.*/ je regulární výraz a mezi lomítky se píše tak, jak se regulární výrazy píší: \?, \\ a čárka tam znamenají to, co tam znamenají. Lomítko, které se nikdy nezavře, je chyba - chcete-li hledat samotné lomítko, napište \/ nebo použijte uvozovky.
  • Velikost písmen se ignoruje, i mimo ASCII - zobrazovaný název v polštině nebo řečtině odpovídá, ať je napsán jakkoli.

Tři slova, která přijímá každé pole

  • any - hodnota existuje, ať je jakákoli
  • none - opravdu žádná hodnota není - položka žádnou nemá
  • ? - nástroj toto pole nemohl přečíst nebo ho nepřečetl, což je otázka, kterou services.msc neumí ani položit

Špatně napsaná hodnota je chyba, nikdy prázdný výsledek. status:runing odpoví Did you mean running? a skončí kódem 2. Prázdný seznam by vypadal jako odpověď a rozdíl mezi "nic neodpovídá" a "napsali jste to špatně" je rozdíl mezi čistým strojem a auditem, který nic neprokázal. Dotaz, který by nic nezúžil, se odmítne i na příkazovém řádku, takže skript neoperuje s celým strojem kvůli překlepu.

Další příklady

Každý funguje stejně ve vyhledávacím poli okna i za bws list --query a každý byl před napsáním sem spuštěn na skutečném Windows. Co najde, závisí na stroji - a u otázky na potíže je prázdná odpověď ta, kterou chcete.

Stav a typ spouštění

DotazCo najde
status:stopPending,startPendingZaseklé při zastavování nebo spouštění - čekání, které snap-in ukazuje a které nikdy neskončí.
start:auto status:stopped trigger:noneNastaveno na automatické spuštění, zastaveno a nečeká na trigger - krátký seznam, který stojí za přečtení po restartu.
start:delayedAutomatické, spuštěné o něco později než ostatní automatické položky.
start:manual,disabled status:runningBěží, ačkoli ji při startu nic nespouští - něco o ni požádalo, spustil ji trigger, nebo někdo.

Účty

DotazCo najde
account:localsystem !publisher:microsoftBěží jako LocalSystem, nejsilnější účet, ze souboru, který Microsoft nepodepsal. Dotaz na vydavatele čte podpisy sám, takže trvá pár sekund.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessSlužby běžící pod jakýmkoli jiným účtem - virtuálním, spravovaným nebo osobním.
account:"NT SERVICE"Virtuální účet služby samotné. Uvozovky drží slova pohromadě kvůli mezeře.

Soubory a podpisy

DotazCo najde
signed:notSigned,untrustedRoot,tamperedBez podpisu, řetězec, kterému Windows nedůvěřuje, nebo soubor změněný po podepsání.
signed:trusted !publisher:microsoftPodepsané, důvěryhodné a ne od Microsoftu - software, který na tento stroj nainstalovaly jiné firmy.
type:driver start:boot,system !signed:trustedOvladače načítané při startu Windows, jejichž podpisu Windows nedůvěřuje. Na zdravém stroji žádné.
!path:C:\Windows type:ownProcessSlužba s vlastním procesem, jejíž soubor leží mimo složku Windows.
path:\AppData\Spouštěno zevnitř něčího profilu, což je poslední místo, kde se služba čeká.
path:\System32\\ type:ownProcessZpětné lomítko před mezerou udělá z mezery součást slova, takže cesta končící zpětným lomítkem se píše se dvěma, pokud za ní následuje další termín. Na konci dotazu stačí jedno.

Triggery a závislosti

DotazCo najde
trigger:device status:stoppedČeká na příchod zařízení, takže je zastavená z důvodu.
trigger:networkSpouštěno, když požadavek dorazí na síťový koncový bod - port, pojmenovanou rouru nebo rozhraní RPC.
trigger:stopPoložky, které trigger umí i zastavit, ne jen spustit.
dependson:WinmgmtPoložky, které ke svému běhu potřebují WMI.
requiredby:SpoolerVšechno, co Print Spooler potřebuje ke svému běhu, a co zase potřebují ty.

Privilegia a procesy

DotazCo najde
privilege:SeTcbPrivilegeŽádá o jednání jako součást operačního systému.
privilege:SeImpersonatePrivilege !account:localsystemMůže jednat jménem klienta a přitom běžet pod jiným účtem než LocalSystem.
sidtype:unrestrictedNese vlastní SID služby ve svém procesu, takže jej oprávnění mohou pojmenovat samostatně. sidtype:restricted se ptá na ty, jejichž proces je navíc omezen pro zápis.
type:sharedProcess status:runningBěží uvnitř sdíleného svchost spolu s dalšími.
memory:>200MBProces využívající více než 200 MB. Paměť se čte sama, když se na ni dotaz ptá.
pid:1000-2000V procesu, jehož id leží mezi 1000 a 2000.

Názvy a text

DotazCo najde
spoolSamotné slovo, hledané v názvu, zobrazovaném názvu, účtu a cestě ke spuštění.
name:=wuauservPřesně tento název a nic, co jej jen obsahuje.
name:win*Názvy začínající na win, zapsané se zástupným znakem.
name:/svc$/Názvy končící na svc, zapsané jako regulární výraz.
description:noneŽádný popis vůbec, což platí pro většinu ovladačů.
description:?Popis, který Windows nedokázal vydat, obvykle proto, že ukazuje na jazykový soubor, který neexistuje.
peruser:templateŠablony pro jednotlivé uživatele, které Windows kopíruje pro každou přihlášenou relaci.

Každé pole

Sestaveno ze samotného programu, takže tato tabulka se nemůže rozejít s tím, co nástroj přijímá. Pole bez seznamu hodnot bere text, číslo nebo velikost - třetí sloupec říká které.

PolePtá se naHodnoty
namenázev služby, podle kterého ji Windows identifikujetext
displayzobrazovaný název, tak jak ho tento Windows píšetext
descriptionco položka říká sama o sobětext
typeo jaký druh položky jdedriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserzda jde o jednu z rodin pro jednotlivé uživatele, jejichž kopii Windows vytváří pro každou relaciyes, no, template, instance
statusco právě dělárunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startco s ní správce udělá při příštím startuautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountúčet, pod kterým běží, tak jak ho správce píšetext, např. localsystem
pidproces, ve kterém běžíčíslo: 1234, >1000, 100-200
triggerpodmínka, která ji spouští nebo zastavujedevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathpříkazový řádek, který správce spouštítext
filezda soubor, který spouští, je na diskupresent, missing
signedco si Windows myslí o podpisu souboru, bez kontroly odvoláníyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherkdo soubor podepsal - prokázáno jen důvěryhodným podpisemtext
privilegeprivilegium, o které položka žádátext, např. SeDebugPrivilege
dependsonco tato položka potřebujenázev služby
requiredbyco se rozbije, když se tato zastavínázev služby
sidtypetyp SID službyunrestricted, restricted, unknown
sddlpopisovač zabezpečení jako texttext
memoryco používá její procesvelikost s jednotkou: 500MB, >1GB, 100MB-1GB
mismatchkonfigurace a stav, které si odporujístopped, running

Dvě věci, které stojí za to znát

Některá pole jsou drahá a dotaz na ně zapne čtení

Podpisy trvají na celém stroji několik sekund a paměť je měření, ne nastavení, takže ani jedno se pro výpis nečte, pokud se o to nepožádá. Dotaz, který jedno z nich zmiňuje, zapne toto čtení sám - nemusíte si pamatovat --signatures navíc k signed:no. V okně dotaz na podpisy říká, že odpověď je neúplná, dokud nedorazí, místo aby ukázal kratší seznam, jako by byl odpovědí.

Výsledek posouzený podle něčeho nečitelného to říká

Pokud byly položky posuzovány podle pole, které tato relace nemohla přečíst, nese výsledek řádek s udáním kolika - protože takový výsledek může některé položky postrádat nebo obsahovat takové, které do něj nepatří. To je totéž pravidlo, které dodržuje celý nástroj: neúspěšné čtení je vidět v odpovědi, nikdy se nepohltí. Vydavatel dostane stejné zacházení, když ho tvrdí jen certifikát: vedle jakéhokoli verdiktu jiného než trusted se název ukáže jako not verified a publisher: počítá položku jako nejistou na vlastním řádku - takže !publisher:microsoft ponechá soubor Microsoftu, který někdo po podepsání změnil.

Reference příkazového řádku