Como Gerenciar Serviços no PowerShell
- Listar Serviços no PowerShell
- Encontrar Serviços Remotos no PowerShell
- Iniciar e Parar Serviços no PowerShell
- Reiniciar Serviço no PowerShell
- Alterar o Tipo de Inicialização de um Serviço no PowerShell

Os serviços do Windows são um dos tópicos que quase todo administrador de sistema do Windows precisa usar. Claro, para gerenciar serviços do Windows, poderíamos iniciar o services.msc
MMC snap-in para tarefas pontuais, mas e se precisarmos construir alguma automação com PowerShell?
Este artigo discutirá todos os cmdlets de serviço do PowerShell, como usá-los e desenvolver nosso script para gerenciar serviços em muitos computadores, localmente ou remotamente.
Listar Serviços no PowerShell
Uma das tarefas mais básicas que podemos realizar com o PowerShell do Windows e serviços é simplesmente enumerar quais serviços existem em um computador local ou remoto. Por exemplo, abra o PowerShell, execute o comando Get-Service
e observe a saída.
O comando Get-Service
por si só listará todos os serviços no computador local e o Status
, Name
e DisplayName
de cada serviço.
Get-Service
Saída:
Status Name DisplayName
------ ---- -----------
Stopped AarSvc_55244 AarSvc_55244
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Running AMD Crash Defen... AMD Crash Defender Service
<SNIP>
Como muitos outros cmdlets, o PowerShell não retorna todas as propriedades para cada serviço.
Embora, por exemplo, queiramos ver um serviço necessário ou talvez a descrição do serviço, podemos encontrar essas propriedades passando o resultado para o comando Select-Object
e usando o caractere curinga *
para representar todas as propriedades.
Get-Service ALG | select *
Saída:
Name : ALG
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : Application Layer Gateway Service
DependentServices : {}
MachineName : .
ServiceName : ALG
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
StartType : Manual
Site :
Container :
Encontrar Serviços Remotos no PowerShell
Talvez estejamos em uma rede e precisemos enumerar serviços em um ou mais computadores Windows remotos. Poderíamos ter feito isso nos dias do PowerShell do Windows usando o parâmetro -ComputerName
, mas, infelizmente, esse parâmetro não existe mais.
Uma maneira de inspecionar serviços do Windows em um computador remoto é usando Windows PowerShell Remoting (ou PS Remoting). Usar o PS Remoting pode encapsular qualquer comando local e invocá-lo em uma sessão remota, assim como estávamos fazendo localmente.
Supondo que tivermos o PowerShell Remoting habilitado em um computador remoto, poderíamos, por exemplo, usar o cmdlet Invoke-Command
para executar o comando Get-Service
em um computador remoto.
$cred = Get-Credential
Invoke-Command -ComputerName SRV1 -ScriptBlock { Get-Service } -Credential $cred
Saída:
Status Name DisplayName PSComputerName
------ ---- ----------- --------------
Stopped AarSvc_55244 AarSvc_55244 SRV1
<SNIP>
Uma vez executado, o cmdlet Invoke-Command
passa todas as informações que Get-Service
retornou, e os serviços seriam retornados para você conforme esperado.
Observe a propriedade extra PSComputerName
retornada pelo cmdlet Invoke-Command
. Também podemos criar um script simples para enumerar serviços em muitos computadores remotos.
Iniciar e Parar Serviços no PowerShell
Também podemos iniciar e parar serviços com o PowerShell do Windows.
Os cmdlets Start-Service
e Stop-Service
fazem exatamente o que esperaríamos. A seguir, podemos usar o pipeline ou o parâmetro -Name
abaixo.
## Stop a service
$serviceName = 'wuauserv'
Stop-Service -Name $serviceName
## Stop a service with the pipeline
Get-Service $wuauserv | Stop-Service
Todos os cmdlets *-Service
nos permitem completar o nome dos valores do serviço com os parâmetros -Name
e -DisplayName
. Basta digitar o parâmetro -Name
seguido de um espaço e pressionar a tecla Tab
.
Veremos que ele percorre todos os serviços no computador local. O mesmo conceito se aplica a iniciar um serviço também.
## Start a service
$serviceName = 'wuauserv'
Start-Service -Name $serviceName
## Start service with the pipeline
Get-Service $wuauserv | Start-Service
Tanto os comandos Start-Service
quanto Stop-Service
são idempotentes, o que significa que se um serviço está iniciado ou parado e tentamos parar ou iniciar o serviço quando já está nesse estado, os cmdlets ignorarão o serviço.
Para parar e iniciar serviços remotos com PowerShell, novamente, você precisará embrulhar esses comandos em um bloco de script e usar o PowerShell Remoting para invocá-los remotamente, como mostrado abaixo.
$cred = Get-Credential
$serviceName = 'wuauserv'
Invoke-Command -ComputerName SRV02 -ScriptBlock { Start-Service -Name $using:serviceName } -Credential $cred
Reiniciar Serviço no PowerShell
Para limitar a reutilização de código ao reiniciar um serviço com o PowerShell do Windows, é melhor usar o cmdlet Restart-Service
. Este cmdlet faz exatamente o que pensamos e funciona de maneira semelhante aos outros comandos de serviço.
Por exemplo, se quisermos iniciar e parar o serviço wuauserv
, como mostrado no exemplo anterior, poderíamos economizar algum código apenas passando a saída de Get-Service
diretamente para Restart-Service
, como mostrado abaixo.
## Restart a service with the Name parameter
$serviceName = 'wuauserv'
Get-Service -Name $serviceName | Restart-Service
Alterar o Tipo de Inicialização de um Serviço no PowerShell
O tipo de inicialização de um serviço é o atributo que dita o que os serviços fazem quando o Windows é iniciado. Portanto, novamente, temos algumas opções.
Automático
: O serviço inicia automaticamente quando o Windows é iniciado.Desativado
: O serviço nunca será iniciado, a menos que alterado.Manual
: O serviço pode ser iniciado, mas deve ser feito manualmente.Automático – Delay
: O serviço inicia automaticamente, mas é adiado uma vez que o Windows é iniciado.
Primeiro, precisamos saber o que é um tipo de inicialização. Você pode encontrar isso com Get-Service
.
Se você estiver usando Get-Service
para encontrar o tipo de inicialização, descobrirá que Get-Service
o chama de Status
e é representado como a propriedade Status
.
(Get-Service -Name wuauserv | select *).StartType
Saída:
Manual
Uma vez que você saiba o tipo de inicialização atual, podemos alterá-lo usando Set-Service
. O exemplo abaixo está definindo o tipo de inicialização como Automático
.
Set-Service -Name <service name> -StartupType Automatic
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn