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
andporque ela não poderia significar outra coisa. - O mesmo campo escrito duas vezes é a única exceção:
status:running status:stoppedsignifica 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 comsetlocal 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:spoolcorresponde 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 fornone- 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 oservices.mscnem 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
| Consulta | O que ela encontra |
|---|---|
status:stopPending, | Presos ao parar ou ao iniciar - a espera que o snap-in mostra e que nunca termina. |
start:auto status:stopped trigger:none | Configurados para iniciar automaticamente, parados e sem aguardar um gatilho - a lista curta que vale a pena ler depois de uma reinicialização. |
start:delayed | Automático, iniciado um pouco depois das outras entradas automáticas. |
start:manual, | Em execução embora nada o inicie na inicialização - algo o pediu, um gatilho o iniciou, ou alguém o fez. |
Contas
| Consulta | O que ela encontra |
|---|---|
account:localsystem !publisher:microsoft | Rodando 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, | Serviç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
| Consulta | O que ela encontra |
|---|---|
signed:notSigned, | Sem assinatura, uma cadeia em que o Windows não confia, ou um arquivo alterado depois de assinado. |
signed:trusted !publisher:microsoft | Assinado, confiável e não pela Microsoft - o software que outras empresas colocaram nesta máquina. |
type:driver start:boot, | Drivers 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:ownProcess | Um 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:ownProcess | Uma 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
| Consulta | O que ela encontra |
|---|---|
trigger:device status:stopped | Aguardando a chegada de um dispositivo, portanto parados por um motivo. |
trigger:network | Iniciado quando chega uma solicitação a um ponto de extremidade de rede - uma porta, um pipe nomeado ou uma interface RPC. |
trigger:stop | Entradas que um gatilho pode parar, não apenas iniciar. |
dependson:Winmgmt | Entradas que precisam do WMI para rodar. |
requiredby:Spooler | Tudo de que o Spooler de Impressão precisa para rodar, e do que esses por sua vez precisam. |
Privilégios e processos
| Consulta | O que ela encontra |
|---|---|
privilege:SeTcbPrivilege | Pede para agir como parte do sistema operacional. |
privilege:SeImpersonatePrivilege !account:localsystem | Pode agir em nome de um cliente enquanto roda sob uma conta diferente de LocalSystem. |
sidtype:unrestricted | Carrega 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:running | Em execução dentro de um svchost compartilhado, junto com outros. |
memory:>200MB | Um processo usando mais de 200 MB. A memória é lida por conta própria quando uma consulta pergunta por ela. |
pid:1000-2000 | Em um processo cujo id está entre 1000 e 2000. |
Nomes e texto
| Consulta | O que ela encontra |
|---|---|
spool | Uma palavra solta, pesquisada no nome, no nome de exibição, na conta e no caminho de lançamento. |
name:=wuauserv | Exatamente 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:none | Nenhuma 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:template | Os 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.
| Campo | Pergunta sobre | Valores |
|---|---|---|
name | o nome do serviço, aquele pelo qual o Windows o identifica | texto |
display | o nome de exibição, como este Windows o escreve | texto |
description | o que a entrada diz sobre si mesma | texto |
type | que tipo de entrada é | driver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown |
peruser | se é uma das famílias por usuário de que o Windows faz uma cópia por sessão | yes, no, template, instance |
status | o que está fazendo agora | running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown |
start | o que o gerenciador faz com ela na próxima inicialização | automatic, auto, delayed, manual, disabled, boot, system, unknown |
account | a conta sob a qual ela roda, como o gerenciador a escreve | texto, p. ex. localsystem |
pid | o processo em que ela está rodando | um número: 1234, >1000, 100-200 |
trigger | uma condição que a inicia ou a para | device, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop |
path | a linha de comando que o gerenciador inicia | texto |
file | se o arquivo que ela executa está no disco | present, missing |
signed | o que o Windows pensa da assinatura do arquivo, sem verificar a revogação | yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown |
publisher | quem assinou o arquivo - comprovado apenas por uma assinatura confiável | texto |
privilege | um privilégio que a entrada pede | texto, p. ex. SeDebugPrivilege |
dependson | do que esta precisa | um nome de serviço |
requiredby | o que deixa de funcionar se esta parar | um nome de serviço |
sidtype | o tipo de SID do serviço | unrestricted, restricted, unknown |
sddl | o descritor de segurança, como texto | texto |
memory | o que o processo dela está usando | um tamanho com unidade: 500MB, >1GB, 100MB-1GB |
mismatch | configuração e estado que discordam | stopped, 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.