Compartilhar via


Gerenciando serviços

Este exemplo se aplica apenas ao Windows PowerShell 5.1.

Há oito cmdlets de Serviço principal, projetados para uma ampla variedade de tarefas de serviço. Este artigo analisa apenas a listagem e a alteração do estado de execução dos serviços. Você pode obter uma lista de cmdlets de serviço usando Get-Command *-Service. Você pode encontrar informações sobre cada cmdlet usando Get-Help <Cmdlet-Name>, como Get-Help New-Service.

Obtenção de serviços

É possível obter os serviços em um computador local ou remoto usando o cmdlet Get-Service. Assim como acontece com Get-Process, usar o comando Get-Service sem parâmetros retornará todos os serviços. Você pode filtrar por nome, até mesmo usando um asterisco como um caractere curinga:

PS> Get-Service -Name se*

Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

Como nem sempre é aparente qual é o nome real do serviço, você pode achar que precisa localizar os serviços pelo nome de exibição. Você pode pesquisar por nome específico, usar caracteres curinga ou fornecer uma lista de nomes de exibição:

PS> Get-Service -DisplayName se*

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center

PS> Get-Service -DisplayName ServiceLayer, Server

Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

Como obter serviços remotos

Com o Windows PowerShell, você pode usar o parâmetro ComputerName do cmdlet Get-Service para obter os serviços em computadores remotos. O parâmetro ComputerName aceita vários valores e caracteres curinga, por isso você pode obter os serviços em vários computadores com um comando. Esse comando obtém os serviços no computador remoto Server01.

Get-Service -ComputerName Server01

A partir do PowerShell 6.0, os cmdlets *-Service não têm o parâmetro ComputerName. Você ainda pode obter serviços em computadores remotos com a comunicação remota do PowerShell. Por exemplo, o comando a seguir obtém os serviços no computador remoto Server02.

Invoke-Command -ComputerName Server02 -ScriptBlock { Get-Service }

Você também pode gerenciar serviços com os outros cmdlets *-Service. Para obter mais informações sobre comunicação remota do PowerShell, confira about_Remote.

Obtenção dos serviços necessários e dependentes

O cmdlet Get-Service tem dois parâmetros que são muito úteis na administração de serviços. O parâmetro DependentServices obtém os serviços que dependem do serviço.

O parâmetro RequiredServices obtém serviços dos quais depende o serviço LanmanWorkstation.

PS> Get-Service -Name LanmanWorkstation -RequiredServices

Status   Name               DisplayName
------   ----               -----------
Running  MRxSmb20           SMB 2.0 MiniRedirector
Running  bowser             Bowser
Running  MRxSmb10           SMB 1.x MiniRedirector
Running  NSI                Network Store Interface Service

O parâmetro DependentServices obtém que requerem o serviço LanmanWorkstation.

PS> Get-Service -Name LanmanWorkstation -DependentServices

Status   Name               DisplayName
------   ----               -----------
Running  SessionEnv         Terminal Services Configuration
Running  Netlogon           Netlogon
Stopped  Browser            Computer Browser
Running  BITS               Background Intelligent Transfer Ser...

O comando a seguir obtém todos os serviços com dependências. O cmdlet Format-Table para exibir as propriedades Status, Name, RequiredServices e DependentServices dos serviços.

Get-Service -Name * | Where-Object {$_.RequiredServices -or $_.DependentServices} |
  Format-Table -Property Status, Name, RequiredServices, DependentServices -auto

Parar, iniciar, suspender e reiniciar serviços

Todos os cmdlets de serviço têm o mesmo formato geral. Os serviços podem ser especificados pelo nome comum ou pelo nome de exibição, assumindo listas e caracteres curinga como valores. Para interromper o spooler de impressão, use:

Stop-Service -Name spooler

Para iniciar o spooler de impressão depois de interrompido, use:

Start-Service -Name spooler

Para suspender o spooler de impressão, use:

Suspend-Service -Name spooler

O cmdlet Restart-Service funciona da mesma maneira que os outros cmdlets Service:

PS> Restart-Service -Name spooler

WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
PS>

Observe que você recebe uma mensagem de aviso repetida sobre a inicialização do Spooler de impressão. Quando você executa uma operação de serviço mais demorada, o PowerShell o notifica de que ainda está tentando executar a tarefa.

Se você quiser reiniciar vários serviços, poderá obter uma lista de serviços, filtrá-los e então executar a reinicialização:

PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service

WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
WARNING: Waiting for service 'Computer Browser (Browser)' to finish stopping...
Restart-Service : can't stop service 'Logical Disk Manager (dmserver)' because
 it has dependent services. It can only be stopped if the Force flag is set.
At line:1 char:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...
WARNING: Waiting for service 'Print Spooler (Spooler)' to finish starting...

Esses cmdlets de serviço não têm um parâmetro ComputerName, mas você pode executá-los em um computador remoto usando o cmdlet Invoke-Command. Esse comando reinicia o serviço de Spooler no computador remoto Server01.

Invoke-Command -ComputerName Server01 {Restart-Service Spooler}

Configuração de propriedades do serviço

O cmdlet Set-Service altera as propriedades de um serviço em um computador local ou remoto. Como o status do serviço é uma propriedade, você pode usar este cmdlet para iniciar, parar e suspender um serviço. O cmdlet Set-Service também tem um parâmetro StartupType que permite alterar o tipo de inicialização do serviço.

Para usar Set-Service no Windows Vista e em versões posteriores do Windows, abra o PowerShell com a opção Executar como administrador.

Para obter mais informações, confira Set-Service

Confira também