Il linguaggio di query

Faccia una domanda alla macchina

Un solo linguaggio, nella casella di ricerca della finestra e in bws list --query. Una parola sola cerca nel nome, nel nome visualizzato, nell'account e nel percorso di avvio. Un campo restringe la ricerca. 21 campi, e lo stesso testo significa la stessa cosa in entrambe le metà dello strumento.

Sei che rispondono a una domanda reale

Ciò che dovrebbe essere attivo e non lo è

start:auto !status:running

La prima query che scrive la maggior parte delle persone, e quella a cui services.msc non può rispondere affatto.

Servizi il cui file è sparito

file:missing

Una voce che punta a un eseguibile non presente sul disco. Di solito una disinstallazione che ha lasciato dietro di sé la registrazione.

Non firmati, senza il rumore delle sessioni

signed:no peruser:no

Le famiglie per utente fanno una copia per sessione e riempiono un elenco di quasi duplicati. Questa interroga il resto.

In esecuzione benché disabilitato

mismatch:running

Configurazione e stato che non concordano - una voce che il gestore è impostato a non avviare mai, in esecuzione comunque.

Tutto ciò che chiede diritti di debug

privilege:SeDebugPrivilege

Un privilegio che permette a un processo di aprirne qualsiasi altro. Vale la pena sapere quali servizi lo chiedono.

Ciò che lo strumento non ha potuto leggere

account:?

Le voci di cui questa sessione non ha potuto leggere l'account. Una domanda che services.msc non sa nemmeno porre.

Come si scrive una query

Termini

  • I termini sono separati da spazi e devono corrispondere tutti - non esiste la parola chiave and perché non potrebbe significare nient'altro.
  • Lo stesso campo scritto due volte è l'unica eccezione: status:running status:stopped significa l'uno o l'altro, perché è ciò che scrive spuntare due filtri. Due limiti su un numero invece restringono - pid:>1000 pid:<2000 è l'intervallo tra i due.
  • ! davanti a un termine lo nega: !status:running. In un file batch con setlocal EnableDelayedExpansion, cmd si mangia quel ! senza dire nulla e la query significa in silenzio qualcos'altro - scriva ^! dentro le virgolette lì.
  • Una virgola dentro un campo è un oppure: start:manual,disabled.
  • Le virgolette proteggono qualsiasi cosa con spazi o due punti: account:"NT SERVICE\McmSvc".
  • Un percorso incollato così com'è - C:\Windows\System32\svchost.exe - viene cercato, non letto come un campo chiamato C.

Come viene confrontato il testo

  • name:spool trova tutto ciò che lo contiene - il comportamento predefinito, perché è ciò che ci si aspetta da una casella di ricerca.
  • name:=spooler è esatto.
  • name:spool* accetta caratteri jolly, * e ?.
  • name:/^Sql.*/ è un'espressione regolare, e dentro le barre si scrive come si scrivono le espressioni regolari: \?, \\ e una virgola significano lì ciò che significano lì. Una barra che non si chiude mai è un errore - per cercare la barra stessa, scriva \/ oppure usi le virgolette.
  • Maiuscole e minuscole sono ignorate, anche fuori da ASCII - un nome visualizzato in polacco o in greco corrisponde comunque sia digitato.

Tre parole che ogni campo accetta

  • any - c'è un valore, qualunque sia
  • none - non c'è davvero alcun valore - la voce non ne ha
  • ? - lo strumento non ha potuto leggere questo campo, o non lo ha letto, il che è una domanda che services.msc non sa nemmeno porre

Un valore digitato male è un errore, mai un risultato vuoto. status:runing risponde Did you mean running? e termina con il codice 2. Un elenco vuoto sembrerebbe una risposta, e la differenza tra "nulla corrisponde" e "ha digitato male" è la differenza tra una macchina pulita e un audit che non ha dimostrato nulla. Una query che non restringerebbe nulla viene rifiutata anche sulla riga di comando, perché uno script non operi sull'intera macchina a causa di un refuso.

Altri esempi

Ognuno funziona allo stesso modo nella casella di ricerca della finestra e dopo bws list --query, e ognuno è stato eseguito su un vero Windows prima di essere scritto qui. Ciò che trova dipende dalla macchina - e per una domanda sui guai, una risposta vuota è quella che vuole.

Stato e tipo di avvio

QueryCosa trova
status:stopPending,startPendingBloccati in arresto o in avvio - l'attesa che lo snap-in mostra e che non finisce mai.
start:auto status:stopped trigger:noneImpostati per avviarsi automaticamente, fermi, e che non attendono un trigger - il breve elenco che vale la pena leggere dopo un riavvio.
start:delayedAutomatico, avviato un poco dopo le altre voci automatiche.
start:manual,disabled status:runningIn esecuzione benché nulla lo avvii all'avvio - qualcosa lo ha richiesto, un trigger lo ha avviato, o qualcuno lo ha fatto.

Account

QueryCosa trova
account:localsystem !publisher:microsoftIn esecuzione come LocalSystem, l'account più potente, da un file che Microsoft non ha firmato. Una query sull'editore legge le firme da sola, quindi richiede qualche secondo.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessServizi in esecuzione con qualsiasi altro account - uno virtuale, uno gestito o quello di una persona.
account:"NT SERVICE"Un account virtuale proprio del servizio. Le virgolette tengono insieme le parole, a causa dello spazio.

File e firme

QueryCosa trova
signed:notSigned,untrustedRoot,tamperedNessuna firma, una catena di cui Windows non si fida, o un file modificato dopo essere stato firmato.
signed:trusted !publisher:microsoftFirmato, affidabile, e non da Microsoft - il software che altre aziende hanno messo su questa macchina.
type:driver start:boot,system !signed:trustedDriver caricati all'avvio di Windows la cui firma Windows non ritiene affidabile. Su una macchina sana, nessuno.
!path:C:\Windows type:ownProcessUn servizio con un processo proprio il cui file si trova fuori dalla cartella Windows.
path:\AppData\Avviato da dentro il profilo di qualcuno, l'ultimo posto in cui ci si aspetta un servizio.
path:\System32\\ type:ownProcessUna barra rovesciata davanti a uno spazio rende lo spazio parte della parola, quindi un percorso che finisce con una barra rovesciata si scrive con due quando segue un altro termine. Alla fine della query ne basta una.

Trigger e dipendenze

QueryCosa trova
trigger:device status:stoppedIn attesa dell'arrivo di un dispositivo, quindi fermi per un motivo.
trigger:networkAvviato quando arriva una richiesta a un endpoint di rete - una porta, una named pipe o un'interfaccia RPC.
trigger:stopVoci che un trigger può fermare, non solo avviare.
dependson:WinmgmtVoci che hanno bisogno di WMI per funzionare.
requiredby:SpoolerTutto ciò di cui lo Spooler di stampa ha bisogno per funzionare, e ciò di cui a loro volta hanno bisogno quelli.

Privilegi e processi

QueryCosa trova
privilege:SeTcbPrivilegeChiede di agire come parte del sistema operativo.
privilege:SeImpersonatePrivilege !account:localsystemPuò agire per conto di un client pur girando con un account diverso da LocalSystem.
sidtype:unrestrictedPorta nel suo processo un SID di servizio proprio, così i permessi possono nominarlo da solo. sidtype:restricted interroga quelli il cui processo è anche limitato in scrittura.
type:sharedProcess status:runningIn esecuzione dentro uno svchost condiviso, insieme ad altri.
memory:>200MBUn processo che usa più di 200 MB. La memoria viene letta da sola quando una query la chiede.
pid:1000-2000In un processo il cui id è tra 1000 e 2000.

Nomi e testo

QueryCosa trova
spoolUna parola sola, cercata nel nome, nel nome visualizzato, nell'account e nel percorso di avvio.
name:=wuauservEsattamente questo nome, e nulla che lo contenga soltanto.
name:win*Nomi che iniziano con win, scritti con un carattere jolly.
name:/svc$/Nomi che finiscono in svc, scritti come espressione regolare.
description:noneNessuna descrizione, il che vale per la maggior parte dei driver.
description:?Una descrizione che Windows non ha potuto consegnare, di solito perché punta a un file di lingua che non c'è.
peruser:templateI modelli per utente che Windows copia per ogni sessione aperta.

Ogni campo

Costruita dal programma stesso, così questa tabella non può discostarsi da ciò che lo strumento accetta. Un campo senza elenco di valori accetta testo, un numero o una dimensione - la terza colonna dice quale.

CampoInterroga suValori
nameil nome del servizio, quello con cui Windows lo identificatesto
displayil nome visualizzato, come lo scrive questo Windowstesto
descriptionciò che la voce dice di sétesto
typeche tipo di voce èdriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserse è una delle famiglie per utente di cui Windows fa una copia per sessioneyes, no, template, instance
statuscosa sta facendo in questo momentorunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startcosa fa il gestore con essa al prossimo avvioautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountl'account con cui gira, come lo scrive il gestoretesto, ad es. localsystem
pidil processo in cui giraun numero: 1234, >1000, 100-200
triggeruna condizione che la avvia o la fermadevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathla riga di comando che il gestore avviatesto
filese il file che esegue è sul discopresent, missing
signedcosa pensa Windows della firma del file, senza controllare la revocayes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherchi ha firmato il file - dimostrato solo da una firma affidabiletesto
privilegeun privilegio che la voce chiedetesto, ad es. SeDebugPrivilege
dependsondi cosa ha bisogno questaun nome di servizio
requiredbycosa smette di funzionare se questa si fermaun nome di servizio
sidtypeil tipo di SID del serviziounrestricted, restricted, unknown
sddlil descrittore di sicurezza, come testotesto
memorycosa usa il suo processouna dimensione con unità: 500MB, >1GB, 100MB-1GB
mismatchconfigurazione e stato che non concordanostopped, running

Due cose da sapere

Alcuni campi sono costosi, e chiederli attiva la lettura

Le firme richiedono parecchi secondi su un'intera macchina e la memoria è una misurazione più che un'impostazione, quindi nessuna delle due viene letta per un elenco se non richiesta. Una query che ne menziona una attiva quella lettura da sola - non deve ricordarsi di --signatures oltre a signed:no. Nella finestra, una query sulle firme dice che la risposta è incompleta finché non arrivano, invece di mostrare un elenco più corto come se fosse la risposta.

Un risultato giudicato su qualcosa di illeggibile lo dice

Se delle voci sono state giudicate su un campo che questa sessione non ha potuto leggere, il risultato porta una riga che dice quante - perché un risultato simile può mancare di voci, o contenerne che non c'entrano. È la stessa regola che tiene tutto lo strumento: una lettura non riuscita è visibile nella risposta, mai inghiottita. Un editore riceve lo stesso trattamento quando solo il certificato lo afferma: accanto a qualsiasi verdetto diverso da trusted il nome è mostrato come not verified, e publisher: conta la voce come incerta in una riga a parte - così !publisher:microsoft tiene un file Microsoft che qualcuno ha modificato dopo la firma.

Il riferimento della riga di comando