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
A janela com cinco entradas selecionadas e o plano para iniciá-las mostrado sobre a lista: cinco etapas, uma nota de que duas delas já estão nesse estado, uma linha bws start para cada entrada e o botão Start 5 entries.
Entradas selecionadas, um plano mostrado antes de qualquer coisa acontecer e a linha 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.
Meio minuto com ele

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.

Quatro entradas selecionadas e o plano para iniciá-las, uma reinicialização forçada do Local Session Manager cujo plano avisa que a máquina não funciona sem ele e pede o nome dele antes de o botão agir, as perguntas iniciais sob a caixa de busca vazia e o Print Spooler encontrado digitando parte do nome e iniciado.
Quatro entradas selecionadas e o plano para iniciá-las, uma reinicialização forçada que pede o nome de um serviço de que a máquina precisa, as perguntas sob uma caixa de busca vazia e o Print Spooler encontrado digitando e iniciado.
A tela inicial: três cartões de números sobre esta máquina - serviços em execução, serviços de início automático que não subiram e serviços de início automático cujo arquivo sumiu - e um botão Show the list.
Abre com alguns números sobre esta máquina. Cada um é uma pergunta - clique nele e a pergunta vai para a caixa de busca.
A lista de serviços com as três listas acima da caixa de busca, uma caixa de busca vazia, os botões de filtro abertos em linhas para estado, tipo de inicialização, assinatura, divergências e gatilhos, e a lista abaixo.
Os botões de filtro escrevem na caixa de busca, de modo que o que você clicou é uma consulta que pode ler e editar.
Por que isto existe

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.exe de cabeça, ou o Registro.
  • Sem paridade na linha de comando. O sc.exe tem uma sintaxe dos anos noventa, e o Get-Service que 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 completa
O que ele faz

Uma 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 o services.msc nunca fez

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-code termina com 5 quando 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.
Como funcionam os instantâneos e a deriva
Nada acontece sem um plano

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-run e 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 kill pede ao serviço que pare e só encerra o processo se isso não funcionar, nomeando todos os outros serviços que vivem nele.
Quando um serviço não para
Dois minutos com ele

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
Como obter

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.

ArquivoO que é
BetterWindowsServices-win-x64.zipA janela, um executável autônomo - sem .NET para instalar
bws-cli-win-x64.zipA linha de comando, um executável autônomo, para scripts e CI
BetterWindowsServices-win-x64.msiO 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.