Pesquise seus serviços do Windows, veja cada mudança antes de executar e descubra o que se desviou desde ontem
Better Windows Services é o services.msc reconstruído para quem administra máquinas Windows - uma janela e uma linha de comando sobre um único motor. Faça uma pergunta à máquina em vez de rolar oitocentas linhas. Veja o que uma mudança fará antes de clicar em qualquer coisa. E o que o services.msc nunca teve: congelar cada serviço em um arquivo e, uma semana depois, perguntar o que mudou.
- Livre e gratuito, GPL-3.0
- Um único arquivo, ou um instalador
- Sem direitos de administrador para consultar
- Nunca se conecta à internet
bws que pede exatamente o mesmo. O programa fala inglês - a janela lê um arquivo de idioma colocado ao lado dela, então uma tradução é possível sem recompilar.Como é no uso
Uma sessão real, em um Windows instalado em polonês - os nomes de exibição vêm do Windows, então estão no idioma dele. A janela em si fala inglês.
O services.msc quase não mudou desde o Windows 2000
Administradores passam horas por semana nele esbarrando nas mesmas paredes.
- Sem busca. A única navegação é saltar para a primeira letra de um nome de exibição.
- Sem filtro. Não há como perguntar mostre o que está configurado para iniciar automaticamente e não está em execução.
- Uma linha por vez. Reiniciar doze serviços são doze cliques com o botão direito e doze esperas.
- "Parando..." para sempre, sem saída além do Gerenciador de Tarefas e de adivinhar o processo.
- Sem histórico. Ninguém sabe quem definiu esse tipo de inicialização como Desabilitado, nem quando.
- Dados ocultos. O processo, os gatilhos, os privilégios, o descritor de segurança, quem assinou o executável - tudo exige o
sc.exede cabeça, ou o Registro. - Sem paridade na linha de comando. O
sc.exetem uma sintaxe dos anos noventa, e oGet-Serviceque vem com o Windows, no Windows PowerShell 5.1, não mostra a conta sob a qual um serviço roda, quanto mais a descrição. O PowerShell 7 mostra as duas coisas e se instala separadamente.
As outras ferramentas resolvem cada uma uma parte
O Process Hacker e o System Informer mostram uma lista rica e podem encerrar um processo à força, mas não têm auditoria nem linha de comando. O sc.exe e o PsService podem fazer tudo e não dizem nada. Os cmdlets *-Service do PowerShell são programáveis e superficiais.
Ninguém combina uma lista pesquisável, uma pré-visualização antes de cada mudança e um registro do que mudou ao longo do tempo - e o registro é o motivo para manter esta ferramenta em uma máquina depois da primeira tarde.
A comparação completaUma janela e uma linha de comando sobre um único motor
Perguntar, em vez de rolar
start:auto !status:running é o que deveria estar no ar e não está. Uma única linguagem, na caixa de busca e em bws list --query, com os campos sugeridos enquanto você digita.
Mostrar o plano antes de qualquer coisa acontecer
Cada parada, início, reinício e mudança de tipo de inicialização é pré-visualizado com os serviços que arrasta consigo, e a pré-visualização é o que executa.
Dizer o que se desviou e quem mudou
bws snapshot create congela a máquina em um arquivo, e bws snapshot diff diz o que mudou desde então, a configuração à parte do que apenas iniciou ou parou. bws history diz, pelo log do Sistema, quem mudou um tipo de inicialização e quem instalou um serviço. A janela faz as três coisas em Audit....
Corrigir um problema comum com um clique
A aba Tools e o bws tool fix reiniciam o serviço por trás de uma impressora que não imprime, de um som que sumiu ou de uma busca travada, junto com o que depende dele, pelo mesmo plano de tudo o mais.
Parar um serviço que não para
Pede com educação primeiro e só encerra o processo se isso falhar, nomeando todos os outros serviços que vivem nele.
Mostrar o que o services.msc esconde
Quem assinou o executável e se o Windows confia nele, gatilhos, privilégios, o descritor de segurança, o processo e sua memória. Como colunas e como critérios de busca.
Avisar quando não conseguiu ler algo
Um campo que não conseguiu ler é informado como não lido, nunca mostrado como vazio. Um instantâneo feito sem direitos de administrador diz isso dentro do próprio arquivo.
Encaixar em scripts
--json em cada comando, um código de saída para cada desfecho e 5 quando uma comparação encontra deriva.
Rodar de um único arquivo, offline
Descompacte e execute, ou instale para a máquina toda. Sem .NET para instalar, e nunca se conecta à internet. Consultar não exige direitos de administrador. GPL-3.0.
O que mudou desde ontem
Um instantâneo é a máquina inteira em um momento - cada serviço e cada driver, com seu tipo de inicialização, conta, caminho de lançamento, o hash e o signatário do arquivo, as dependências, os gatilhos, os privilégios e o descritor de segurança. É JSON com um campo por linha, então cabe em um repositório e o git diff o lê.
$ bws snapshot diff before.json --live --exit-code
Changed (2):
Spooler Print Spooler
startType: Manual -> Automatic
status: Stopped -> Running (running state, not configuration)
wlidsvc Microsoft Account Sign-in Assistant
status: Stopped -> Running (running state, not configuration)
Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
- Configuração e estado de execução são informados separadamente. Dois instantâneos feitos com um dia de intervalo diferem no que por acaso está em execução, e quase nada disso é deriva - o tipo de inicialização que mudou é a linha a ler.
- O que não pôde ser comparado é listado, não escondido. Um campo que um instantâneo nunca leu sai como not compared, de modo que uma comparação que diz nada mudou significa que nada mudou no que os dois lados podiam ver.
--exit-codetermina com5quando a configuração difere, de modo que uma tarefa agendada pode fazer um instantâneo na implantação e avisar alguém na primeira noite em que a máquina se desviar.- Duas máquinas, dois arquivos. Faça um instantâneo no ambiente de homologação e outro em produção, e compare-os em qualquer lugar.
A pré-visualização é a execução
Toda operação que grava constrói primeiro um plano, e esse mesmo plano é a pré-visualização, a cascata de serviços dependentes, a recusa antes de você clicar em qualquer coisa, a linha de comando que pede o mesmo e o caminho de volta depois.
$ bws stop Winmgmt --dry-run --dependents
Plan: stop Winmgmt (2 steps)
1. stop vmms (would break otherwise)
2. stop Winmgmt (asked for)
Warnings:
- Stopping Winmgmt also stops one other entry: vmms
- Winmgmt starts automatically, so it will be back after the next restart.
- Execute sem
--dry-rune essas são as etapas, nessa ordem, com os mesmos motivos ao lado. Não existe um segundo caminho de código para a execução de verdade. - O que cai junto está no plano. Os serviços que deixariam de funcionar são etapas próprias, e um plano que derrubaria algo de que a máquina precisa diz isso nos avisos.
- A recusa vem antes do botão. Um driver, um serviço para o qual o gerenciador não aceita parada, um processo que o sistema protege - recusados quando o plano é construído, com o motivo. A janela deixa o botão cinza e diz o porquê ao lado.
- A parada forçada tem duas etapas, e a segunda é condicional. O
bws killpede ao serviço que pare e só encerra o processo se isso não funcionar, nomeando todos os outros serviços que vivem nele.
Pela linha de comando
O mesmo motor da janela, para scripts, tarefas agendadas e CI. Os dados vão para a saída padrão e todo o resto para o erro padrão, de modo que bws list --json | jq funciona e um aviso nunca cai no seu JSON.
bws list --query "start:auto !status:running" o que deveria estar no ar e não está
bws list --query "file:missing" serviços cujo executável sumiu
bws list --query "signed:no peruser:no" sem assinatura, sem as cópias por sessão
bws show Spooler tudo o que se sabe sobre uma entrada
bws stop Winmgmt --dry-run --dependents o que pará-lo arrastaria junto
bws kill Spooler --dry-run o que encerrar o processo dele levaria junto
bws start-type Spooler manual --dry-run o que tirá-lo do automático faria
bws snapshot create before.json congelar a máquina antes de uma mudança
bws snapshot diff before.json --live --exit-code o que mudou desde então, 5 se a configuração mudou
bws history Spooler quem mudou o tipo de inicialização dele, e quando
bws tool fix printer --dry-run o que a correção rápida de uma impressora travada faria
Cada comando, opção e código de saída
Descompacte e execute, ou instale
Windows 10 1809 ou Windows Server 2019 e posteriores, de 64 bits. Os arquivos compactados não precisam de instalador e não gravam nada no Registro, e consultar não exige direitos de administrador. Mudar qualquer coisa exige uma sessão com privilégios elevados, e as duas metades dizem isso em vez de falhar em silêncio - a janela oferece Restart as admin.
| Arquivo | O que é |
|---|---|
BetterWindowsServices-win-x64.zip | A janela, um executável autônomo - sem .NET para instalar |
bws-cli-win-x64.zip | A linha de comando, um executável autônomo, para scripts e CI |
BetterWindowsServices-win-x64.msi | O instalador: os dois programas para todas as contas da máquina, a janela no menu Iniciar e o bws no PATH |
Os executáveis levam uma assinatura Authenticode, de modo que o Windows nomeia o editor em vez de avisar sobre um desconhecido.

