Limbajul de interogare

Puneți mașinii o întrebare

Un singur limbaj, în caseta de căutare a ferestrei și în bws list --query. Un cuvânt simplu caută în nume, numele afișat, cont și calea de lansare. Un câmp îl restrânge. 21 câmpuri, iar același text înseamnă același lucru în ambele jumătăți ale instrumentului.

Șase care răspund la o întrebare reală

Ce ar trebui să fie pornit și nu este

start:auto !status:running

Prima interogare pe care o scriu majoritatea oamenilor, și cea la care services.msc nu poate răspunde deloc.

Servicii al căror fișier a dispărut

file:missing

O intrare care indică spre un executabil ce nu se află pe disc. De obicei, o dezinstalare care a lăsat înregistrarea în urmă.

Nesemnate, fără zgomotul sesiunilor

signed:no peruser:no

Familiile pe utilizator fac câte o copie pe sesiune și umplu lista cu aproape-duplicate. Aceasta întreabă despre restul.

Rulează deși este dezactivat

mismatch:running

Configurație și stare care nu concordă - o intrare pe care managerul este setat să n-o pornească niciodată, rulând totuși.

Tot ce cere drepturi de depanare

privilege:SeDebugPrivilege

Un privilegiu care permite unui proces să deschidă oricare altul. Merită să știți ce servicii îl cer.

Ce n-a putut citi instrumentul

account:?

Intrările la care această sesiune n-a putut citi contul. O întrebare pe care services.msc nici măcar nu o poate pune.

Cum se scrie o interogare

Termeni

  • Termenii se separă prin spații și toți trebuie să se potrivească - nu există cuvântul-cheie and pentru că n-ar putea însemna altceva.
  • Același câmp scris de două ori este singura excepție: status:running status:stopped înseamnă oricare dintre ele, pentru că asta scrie bifarea a două filtre. Două limite pe un număr tot restrâng - pid:>1000 pid:<2000 este intervalul dintre ele.
  • ! în fața unui termen îl neagă: !status:running. Într-un fișier batch cu setlocal EnableDelayedExpansion, cmd înghite acel ! fără un cuvânt, iar interogarea înseamnă în tăcere altceva - scrieți acolo ^! între ghilimele.
  • O virgulă în interiorul unui câmp înseamnă sau: start:manual,disabled.
  • Ghilimelele protejează orice conține spații sau două puncte: account:"NT SERVICE\McmSvc".
  • O cale lipită ca atare - C:\Windows\System32\svchost.exe - este căutată, nu citită ca un câmp numit C.

Cum se potrivește textul

  • name:spool se potrivește cu orice îl conține - implicit, pentru că asta se așteaptă oamenii de la o casetă de căutare.
  • name:=spooler este exact.
  • name:spool* acceptă metacaractere, * și ?.
  • name:/^Sql.*/ este o expresie regulată și, între bare oblice, se scrie așa cum se scriu expresiile regulate: \?, \\ și o virgulă înseamnă acolo ce înseamnă acolo. O bară oblică care nu se închide niciodată este o eroare - pentru a căuta bara însăși, scrieți \/ sau folosiți ghilimele.
  • Majusculele sunt ignorate, inclusiv în afara ASCII - un nume afișat în poloneză sau greacă se potrivește oricum ar fi tastat.

Trei cuvinte pe care le acceptă fiecare câmp

  • any - există o valoare, oricare ar fi
  • none - chiar nu există nicio valoare - intrarea nu are una
  • ? - instrumentul n-a putut citi acest câmp sau nu l-a citit, ceea ce este o întrebare pe care services.msc nici măcar nu o poate pune

O valoare scrisă greșit este o eroare, niciodată un rezultat gol. status:runing răspunde Did you mean running? și se încheie cu codul 2. O listă goală ar arăta ca un răspuns, iar diferența dintre "nimic nu se potrivește" și "ați scris greșit" este diferența dintre o mașină curată și un audit care n-a dovedit nimic. O interogare care n-ar restrânge nimic este refuzată și în linia de comandă, ca un script să nu opereze pe toată mașina din cauza unei greșeli de tastare.

Mai multe exemple

Fiecare funcționează la fel în caseta de căutare a ferestrei și după bws list --query, iar fiecare a fost rulat pe un Windows real înainte de a fi scris aici. Ce găsește depinde de mașină - iar pentru o întrebare despre probleme, un răspuns gol este cel pe care îl doriți.

Stare și tip de pornire

InterogareCe găsește
status:stopPending,startPendingBlocat la oprire sau la pornire - așteptarea pe care snap-in-ul o arată și care nu se termină niciodată.
start:auto status:stopped trigger:noneSetat să pornească automat, oprit și care nu așteaptă un declanșator - lista scurtă care merită citită după o repornire.
start:delayedAutomat, pornit puțin după celelalte intrări automate.
start:manual,disabled status:runningRulează deși nimic nu îl pornește la boot - ceva l-a cerut, l-a pornit un declanșator sau cineva.

Conturi

InterogareCe găsește
account:localsystem !publisher:microsoftRulează ca LocalSystem, cel mai puternic cont, dintr-un fișier pe care Microsoft nu l-a semnat. O interogare despre editor citește singură semnăturile, deci durează câteva secunde.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessServicii care rulează sub orice alt cont - unul virtual, unul gestionat sau al unei persoane.
account:"NT SERVICE"Un cont virtual al serviciului însuși. Ghilimelele țin cuvintele laolaltă, din cauza spațiului.

Fișiere și semnături

InterogareCe găsește
signed:notSigned,untrustedRoot,tamperedFără semnătură, un lanț în care Windows nu are încredere sau un fișier modificat după ce a fost semnat.
signed:trusted !publisher:microsoftSemnat, de încredere și nu de Microsoft - software-ul pe care alte companii l-au pus pe această mașină.
type:driver start:boot,system !signed:trustedDrivere încărcate la pornirea Windows a căror semnătură nu inspiră încredere Windows-ului. Pe o mașină sănătoasă, niciunul.
!path:C:\Windows type:ownProcessUn serviciu cu propriul proces al cărui fișier se află în afara folderului Windows.
path:\AppData\Lansat din interiorul profilului cuiva, ultimul loc în care se așteaptă un serviciu.
path:\System32\\ type:ownProcessO bară oblică inversă înaintea unui spațiu face spațiul parte din cuvânt, așa că o cale care se termină cu bară oblică inversă se scrie cu două atunci când după ea urmează alt termen. La sfârșitul interogării una este de ajuns.

Declanșatoare și dependențe

InterogareCe găsește
trigger:device status:stoppedAșteaptă sosirea unui dispozitiv, deci oprit dintr-un motiv.
trigger:networkPornit când o cerere ajunge la un punct final de rețea - un port, o conductă numită sau o interfață RPC.
trigger:stopIntrări pe care un declanșator le poate opri, nu doar porni.
dependson:WinmgmtIntrări care au nevoie de WMI pentru a rula.
requiredby:SpoolerTot ce are nevoie Print Spooler ca să ruleze și ce au nevoie la rândul lor acelea.

Privilegii și procese

InterogareCe găsește
privilege:SeTcbPrivilegeCere să acționeze ca parte a sistemului de operare.
privilege:SeImpersonatePrivilege !account:localsystemPoate acționa în numele unui client rulând sub alt cont decât LocalSystem.
sidtype:unrestrictedPoartă propriul SID de serviciu în procesul său, deci permisiunile îl pot numi doar pe el. sidtype:restricted întreabă despre cele al căror proces este și restricționat la scriere.
type:sharedProcess status:runningRulează în interiorul unui svchost partajat, împreună cu altele.
memory:>200MBUn proces care folosește mai mult de 200 MB. Memoria este citită singură când o interogare întreabă despre ea.
pid:1000-2000Într-un proces al cărui id se află între 1000 și 2000.

Nume și text

InterogareCe găsește
spoolUn cuvânt simplu, căutat în nume, numele afișat, cont și calea de lansare.
name:=wuauservExact acest nume și nimic care îl conține doar.
name:win*Nume care încep cu win, scrise cu metacaracter.
name:/svc$/Nume care se termină în svc, scrise ca expresie regulată.
description:noneNicio descriere deloc, ceea ce este cazul majorității driverelor.
description:?O descriere pe care Windows n-a putut-o preda, de obicei pentru că indică un fișier de limbă care lipsește.
peruser:templateȘabloanele pe utilizator pe care Windows le copiază pentru fiecare sesiune autentificată.

Fiecare câmp

Construit din programul însuși, deci acest tabel nu se poate abate de la ce acceptă instrumentul. Un câmp fără listă de valori acceptă text, un număr sau o dimensiune - a treia coloană spune care.

CâmpÎntreabă despreValori
namenumele serviciului, cel după care îl identifică Windowstext
displaynumele afișat, așa cum îl scrie acest Windowstext
descriptionce spune intrarea despre sinetext
typece fel de intrare estedriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserdacă este una dintre familiile pe utilizator pe care Windows le copiază pentru fiecare sesiuneyes, no, template, instance
statusce face chiar acumrunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startce face managerul cu ea la următoarea pornireautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountcontul sub care rulează, așa cum îl scrie managerultext, de ex. localsystem
pidprocesul în care ruleazăun număr: 1234, >1000, 100-200
triggero condiție care o pornește sau o opreștedevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathlinia de comandă pe care o lansează managerultext
filedacă fișierul pe care îl execută se află pe discpresent, missing
signedce crede Windows despre semnătura fișierului, fără a verifica revocareayes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publishercine a semnat fișierul - dovedit doar de o semnătură de încrederetext
privilegeun privilegiu pe care îl cere intrareatext, de ex. SeDebugPrivilege
dependsonde ce are nevoie aceastaun nume de serviciu
requiredbyce se defectează dacă aceasta se opreșteun nume de serviciu
sidtypetipul SID al serviciuluiunrestricted, restricted, unknown
sddldescriptorul de securitate, ca texttext
memoryce folosește procesul eio dimensiune cu unitate: 500MB, >1GB, 100MB-1GB
mismatchconfigurație și stare care nu concordăstopped, running

Două lucruri bune de știut

Unele câmpuri sunt scumpe, iar a le cere pornește citirea

Semnăturile durează câteva secunde pe o mașină întreagă, iar memoria este o măsurătoare și nu o setare, așa că niciuna nu este citită pentru o listă decât dacă se cere. O interogare care menționează una pornește singură acea citire - nu trebuie să vă amintiți --signatures pe lângă signed:no. În fereastră, o interogare despre semnături spune că răspunsul este incomplet până sosesc, în loc să arate o listă mai scurtă ca și cum ar fi răspunsul.

Un rezultat judecat după ceva necitibil spune asta

Dacă intrările au fost judecate după un câmp pe care această sesiune nu l-a putut citi, rezultatul poartă o linie care spune câte - pentru că un astfel de rezultat poate lipsi intrări sau poate conține unele care nu îi aparțin. Este aceeași regulă pe care o respectă tot instrumentul: o citire eșuată este vizibilă în răspuns, niciodată înghițită. Un editor primește același tratament când doar certificatul îl afirmă: lângă orice verdict altul decât trusted numele este afișat ca not verified, iar publisher: socotește intrarea nesigură pe o linie proprie - deci !publisher:microsoft păstrează un fișier Microsoft pe care cineva l-a modificat după semnare.

Referința liniei de comandă