Como Gerenciar Serviços no PowerShell

  1. Listar Serviços no PowerShell
  2. Encontrar Serviços Remotos no PowerShell
  3. Iniciar e Parar Serviços no PowerShell
  4. Reiniciar Serviço no PowerShell
  5. Alterar o Tipo de Inicialização de um Serviço no PowerShell
Como Gerenciar Serviços 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
Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artigo relacionado - PowerShell Service