sc.exe, Get-Service e isto
Os dois já estão na máquina, e os dois continuarão úteis. Esta página trata de onde eles param - e diz com clareza onde ainda são a melhor resposta.
Onde cada um para
sc.exe
Ele alcança quase tudo que o gerenciador de controle de serviços sabe, e não diz nada sobre como perguntar. A sintaxe é dos anos noventa - sc config X start= auto, em que o espaço depois do sinal de igual é obrigatório e a sua ausência é uma falha silenciosa em fazer o que você queria.
Ele responde sobre uma entrada por vez. Não há filtro, nem saída que um script possa analisar sem escrever um analisador, nem pré-visualização: o sc stop ou funciona ou devolve um número.
Get-Service e os cmdlets *-Service
Objetos de verdade, um pipeline e uma visão superficial. No Windows PowerShell 5.1, o que vem com o Windows, o Get-Service não mostra a conta sob a qual um serviço roda nem a descrição dele. O PowerShell 7 mostra as duas coisas, e o caminho de lançamento também, e se instala separadamente.
Stop-Service -Force significa "mesmo que algo dependa dele" - ele para os dependentes, e conta depois e não antes.
As mesmas perguntas, de três jeitos
| Pergunta | Com o que há na máquina | Aqui |
|---|---|---|
| O que deveria estar no ar e não está | Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
bws list --query "start:auto !status:running" |
| Quais serviços têm um executável sem assinatura | Ler cada caminho de lançamento, resolvê-lo, chamar Get-AuthenticodeSignature em cada um - um script, não um comando |
bws list --query "signed:no" |
| O que pará-lo derrubaria junto | sc enumdepend X, depois ler a lista e decidir você mesmo |
bws stop X --dry-run --dependents, que é o plano que executaria |
| O que mudou desde a semana passada | Nada, a menos que você tenha escrito o coletor | bws snapshot diff before.json --live |
| Quem mudou o tipo de inicialização, e quando | Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }, depois ler a mensagem de cada evento |
bws history Spooler, cuja primeira linha diz até onde o log alcança |
| Saída legível por máquina | Objetos do PowerShell, texto do sc.exe |
--json em cada comando, na saída padrão, com os avisos no erro padrão |
Onde esta ferramenta discorda do sc.exe sobre um serviço, isso é um bug daqui. Parte do conjunto de testes executa os dois contra a máquina em que está e os compara entrada por entrada, e uma diferença entre os dois é a coisa mais útil que você pode colocar em um relato de problema.
Quando continuar usando o que você tem
- Você está em uma máquina que vai mexer uma única vez. Os dois já estão lá e nada precisa passar por uma política.
- Você precisa mudar a conta, o caminho de lançamento ou as ações de recuperação. O
sc.exefaz as três coisas. Esta ferramenta mostra a conta e o caminho de lançamento e não muda nenhum dos dois, e lê as ações de recuperação só para avisar antes de encerrar um processo. - Você precisa criar ou excluir um serviço.
sc createesc delete. Não aqui, de propósito. - Você já está no meio de um pipeline do PowerShell. O
bws list --jsonvolta como objetos peloConvertFrom-Json, então entra no pipeline em vez de substituí-lo.
Juntos, em vez de no lugar
A ferramenta que responde o que há de errado com esta máquina e as ferramentas que mudam uma configuração não são a mesma ferramenta. Faça a pergunta aqui, leia o plano aqui e use o que preferir para executá-lo - o plano imprime a linha de comando que pede o mesmo, e essa linha foi feita para ser copiada.