A linguagem de consulta

Faça uma pergunta à máquina

Uma única linguagem, na caixa de busca da janela e em bws list --query. Uma palavra solta pesquisa o nome, o nome de exibição, a conta e o caminho de lançamento. Um campo restringe a busca. 21 campos, e o mesmo texto significa a mesma coisa nas duas metades da ferramenta.

Seis que respondem a uma pergunta de verdade

O que deveria estar no ar e não está

start:auto !status:running

A primeira consulta que a maioria das pessoas escreve, e a que o services.msc não consegue responder de jeito nenhum.

Serviços cujo arquivo sumiu

file:missing

Uma entrada apontando para um executável que não está no disco. Em geral, uma desinstalação que deixou o registro para trás.

Sem assinatura, sem o ruído das sessões

signed:no peruser:no

As famílias por usuário fazem uma cópia por sessão e enchem uma lista de quase duplicatas. Esta pergunta sobre o resto.

Em execução embora desabilitado

mismatch:running

Configuração e estado que discordam - uma entrada que o gerenciador está configurado para nunca iniciar, em execução mesmo assim.

Qualquer coisa que peça direitos de depuração

privilege:SeDebugPrivilege

Um privilégio que permite a um processo abrir qualquer outro. Vale saber quais serviços o pedem.

O que a ferramenta não conseguiu ler

account:?

As entradas cuja conta esta sessão não conseguiu ler. Uma pergunta que o services.msc nem sabe fazer.

Como uma consulta é escrita

Termos

  • Os termos são separados por espaços e todos precisam corresponder - não existe a palavra-chave and porque ela não poderia significar outra coisa.
  • O mesmo campo escrito duas vezes é a única exceção: status:running status:stopped significa um ou outro, porque é o que se escreve ao marcar dois filtros. Dois limites em um número continuam restringindo - pid:>1000 pid:<2000 é o intervalo entre eles.
  • ! na frente de um termo o nega: !status:running. Em um arquivo em lote com setlocal EnableDelayedExpansion, o cmd come esse ! sem dizer nada e a consulta passa a significar outra coisa em silêncio - escreva ^! dentro das aspas ali.
  • Uma vírgula dentro de um campo é um ou: start:manual,disabled.
  • Aspas protegem qualquer coisa com espaços ou dois-pontos: account:"NT SERVICE\McmSvc".
  • Um caminho colado como está - C:\Windows\System32\svchost.exe - é pesquisado, não lido como um campo chamado C.

Como o texto é comparado

  • name:spool corresponde a tudo que o contém - o padrão, porque é o que se espera de uma caixa de busca.
  • name:=spooler é exato.
  • name:spool* aceita curingas, * e ?.
  • name:/^Sql.*/ é uma expressão regular, e dentro das barras é escrita do jeito que as expressões regulares se escrevem: \?, \\ e uma vírgula significam ali o que significam ali. Uma barra que nunca fecha é um erro - para procurar a própria barra, escreva \/ ou use aspas.
  • Maiúsculas e minúsculas são ignoradas, inclusive fora do ASCII - um nome de exibição em polonês ou em grego corresponde de qualquer jeito que seja digitado.

Três palavras que todo campo aceita

  • any - há um valor, seja qual for
  • none - realmente não há valor nenhum - a entrada não tem
  • ? - a ferramenta não conseguiu ler este campo, ou não o leu, o que é uma pergunta que o services.msc nem sabe fazer

Um valor digitado errado é um erro, nunca um resultado vazio. status:runing responde Did you mean running? e termina com o código 2. Uma lista vazia pareceria uma resposta, e a diferença entre "nada corresponde" e "você digitou errado" é a diferença entre uma máquina limpa e uma auditoria que não provou nada. Uma consulta que não restringiria nada também é recusada na linha de comando, para que um script não opere sobre a máquina inteira por causa de um erro de digitação.

Mais exemplos

Cada um funciona do mesmo jeito na caixa de busca da janela e depois de bws list --query, e cada um foi executado em um Windows de verdade antes de ser escrito aqui. O que ele encontra depende da máquina - e para uma pergunta sobre problemas, uma resposta vazia é a que você quer.

Estado e tipo de inicialização

ConsultaO que ela encontra
status:stopPending,startPendingPresos ao parar ou ao iniciar - a espera que o snap-in mostra e que nunca termina.
start:auto status:stopped trigger:noneConfigurados para iniciar automaticamente, parados e sem aguardar um gatilho - a lista curta que vale a pena ler depois de uma reinicialização.
start:delayedAutomático, iniciado um pouco depois das outras entradas automáticas.
start:manual,disabled status:runningEm execução embora nada o inicie na inicialização - algo o pediu, um gatilho o iniciou, ou alguém o fez.

Contas

ConsultaO que ela encontra
account:localsystem !publisher:microsoftRodando como LocalSystem, a conta mais poderosa, a partir de um arquivo que a Microsoft não assinou. Uma consulta sobre o editor lê as assinaturas por conta própria, então leva alguns segundos.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessServiços rodando sob qualquer outra conta - uma virtual, uma gerenciada ou a de uma pessoa.
account:"NT SERVICE"Uma conta virtual própria do serviço. As aspas mantêm as palavras juntas, por causa do espaço.

Arquivos e assinaturas

ConsultaO que ela encontra
signed:notSigned,untrustedRoot,tamperedSem assinatura, uma cadeia em que o Windows não confia, ou um arquivo alterado depois de assinado.
signed:trusted !publisher:microsoftAssinado, confiável e não pela Microsoft - o software que outras empresas colocaram nesta máquina.
type:driver start:boot,system !signed:trustedDrivers carregados quando o Windows inicia cuja assinatura o Windows não considera confiável. Em uma máquina saudável, nenhum.
!path:C:\Windows type:ownProcessUm serviço com processo próprio cujo arquivo fica fora da pasta do Windows.
path:\AppData\Lançado de dentro do perfil de alguém, o último lugar onde se espera um serviço.
path:\System32\\ type:ownProcessUma barra invertida na frente de um espaço faz o espaço fazer parte da palavra, então um caminho terminado em barra invertida é escrito com duas quando outro termo o segue. No fim da consulta, uma basta.

Gatilhos e dependências

ConsultaO que ela encontra
trigger:device status:stoppedAguardando a chegada de um dispositivo, portanto parados por um motivo.
trigger:networkIniciado quando chega uma solicitação a um ponto de extremidade de rede - uma porta, um pipe nomeado ou uma interface RPC.
trigger:stopEntradas que um gatilho pode parar, não apenas iniciar.
dependson:WinmgmtEntradas que precisam do WMI para rodar.
requiredby:SpoolerTudo de que o Spooler de Impressão precisa para rodar, e do que esses por sua vez precisam.

Privilégios e processos

ConsultaO que ela encontra
privilege:SeTcbPrivilegePede para agir como parte do sistema operacional.
privilege:SeImpersonatePrivilege !account:localsystemPode agir em nome de um cliente enquanto roda sob uma conta diferente de LocalSystem.
sidtype:unrestrictedCarrega no processo um SID de serviço próprio, de modo que as permissões podem nomeá-lo sozinho. sidtype:restricted pergunta pelos que também têm o processo com gravação restrita.
type:sharedProcess status:runningEm execução dentro de um svchost compartilhado, junto com outros.
memory:>200MBUm processo usando mais de 200 MB. A memória é lida por conta própria quando uma consulta pergunta por ela.
pid:1000-2000Em um processo cujo id está entre 1000 e 2000.

Nomes e texto

ConsultaO que ela encontra
spoolUma palavra solta, pesquisada no nome, no nome de exibição, na conta e no caminho de lançamento.
name:=wuauservExatamente este nome, e nada que apenas o contenha.
name:win*Nomes que começam com win, escritos com um curinga.
name:/svc$/Nomes que terminam em svc, escritos como expressão regular.
description:noneNenhuma descrição, o que vale para a maioria dos drivers.
description:?Uma descrição que o Windows não conseguiu entregar, em geral porque aponta para um arquivo de idioma que não existe.
peruser:templateOs modelos por usuário que o Windows copia para cada sessão aberta.

Cada campo

Construída a partir do próprio programa, de modo que esta tabela não pode se afastar do que a ferramenta aceita. Um campo sem lista de valores aceita texto, um número ou um tamanho - a terceira coluna diz qual.

CampoPergunta sobreValores
nameo nome do serviço, aquele pelo qual o Windows o identificatexto
displayo nome de exibição, como este Windows o escrevetexto
descriptiono que a entrada diz sobre si mesmatexto
typeque tipo de entrada édriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserse é uma das famílias por usuário de que o Windows faz uma cópia por sessãoyes, no, template, instance
statuso que está fazendo agorarunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
starto que o gerenciador faz com ela na próxima inicializaçãoautomatic, auto, delayed, manual, disabled, boot, system, unknown
accounta conta sob a qual ela roda, como o gerenciador a escrevetexto, p. ex. localsystem
pido processo em que ela está rodandoum número: 1234, >1000, 100-200
triggeruma condição que a inicia ou a paradevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
patha linha de comando que o gerenciador iniciatexto
filese o arquivo que ela executa está no discopresent, missing
signedo que o Windows pensa da assinatura do arquivo, sem verificar a revogaçãoyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherquem assinou o arquivo - comprovado apenas por uma assinatura confiáveltexto
privilegeum privilégio que a entrada pedetexto, p. ex. SeDebugPrivilege
dependsondo que esta precisaum nome de serviço
requiredbyo que deixa de funcionar se esta pararum nome de serviço
sidtypeo tipo de SID do serviçounrestricted, restricted, unknown
sddlo descritor de segurança, como textotexto
memoryo que o processo dela está usandoum tamanho com unidade: 500MB, >1GB, 100MB-1GB
mismatchconfiguração e estado que discordamstopped, running

Duas coisas que vale saber

Alguns campos são caros, e pedi-los liga a leitura

Assinaturas levam vários segundos em uma máquina inteira e a memória é uma medição e não uma configuração, então nenhuma das duas é lida para uma listagem a menos que seja pedida. Uma consulta que menciona uma delas liga essa leitura por conta própria - você não precisa lembrar de --signatures além de signed:no. Na janela, uma consulta sobre assinaturas diz que a resposta está incompleta até que cheguem, em vez de mostrar uma lista mais curta como se fosse a resposta.

Um resultado julgado com base em algo ilegível diz isso

Se entradas foram julgadas com base em um campo que esta sessão não conseguiu ler, o resultado traz uma linha dizendo quantas - porque um resultado assim pode estar sem entradas, ou conter algumas que não pertencem. É a mesma regra que a ferramenta inteira segue: uma leitura malsucedida fica visível na resposta, nunca engolida. Um editor recebe o mesmo tratamento quando só o certificado o afirma: ao lado de qualquer veredito que não seja trusted o nome é mostrado como not verified, e publisher: conta a entrada como incerta em uma linha própria - de modo que !publisher:microsoft mantém um arquivo da Microsoft que alguém alterou depois de assinado.

A referência da linha de comando