Condividi tramite


Gestione dei servizi

Questo esempio si applica solo a Windows PowerShell 5.1.

Sono disponibili otto cmdlet di base del servizio , progettati per un'ampia gamma di attività del servizio. Questo articolo esamina solo l'elenco e la modifica dello stato di esecuzione per i servizi. È possibile ottenere un elenco di cmdlet del servizio usando Get-Command *-Service. È possibile trovare informazioni su ogni cmdlet usando Get-Help <Cmdlet-Name>, ad esempio Get-Help New-Service.

Recupero di servizi

È possibile ottenere i servizi in un computer locale o remoto usando il cmdlet Get-Service. Come con Get-Process, l'uso del comando Get-Service senza parametri restituisce tutti i servizi. È possibile filtrare per nome, usando anche un asterisco come carattere jolly:

PS> Get-Service -Name se*

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

Poiché non è sempre evidente il nome reale del servizio, potrebbe essere necessario trovare i servizi in base al nome visualizzato. È possibile cercare in base a un nome specifico, usare caratteri jolly o specificare un elenco di nomi visualizzati:

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

Recupero di servizi remoti

Con Windows PowerShell è possibile usare il parametro ComputerName del Get-Service cmdlet per ottenere i servizi nei computer remoti. Il parametro ComputerName accetta più valori e caratteri jolly, quindi è possibile ottenere i servizi in più computer con un singolo comando. Il comando seguente ottiene ad esempio i servizi nel computer remoto Server01.

Get-Service -ComputerName Server01

A partire da PowerShell 6.0, i *-Service cmdlet non hanno il parametro ComputerName . È comunque possibile ottenere servizi in computer remoti con la comunicazione remota di PowerShell. Ad esempio, il comando seguente ottiene i servizi nel computer remoto Server02.

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

È anche possibile gestire i servizi con gli altri *-Service cmdlet. Per altre informazioni sulla comunicazione remota di PowerShell, vedere about_Remote.

Recupero dei servizi necessari e dipendenti

Il cmdlet Get-Service include due parametri molto utili per l'amministrazione dei servizi. Il parametro DependentServices ottiene i servizi che dipendono dal servizio.

Il parametro RequiredServices ottiene i servizi da cui dipende il servizio 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

Il parametro DependentServices ottiene che richiedono il servizio 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...

Il comando seguente ottiene tutti i servizi con dipendenze. Cmdlet Format-Table per visualizzare le proprietà Status, Name, RequiredServices e DependentServices dei servizi.

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

Arresto, avvio, sospensione e riavvio dei servizi

I cmdlet Service hanno tutti lo stesso formato generale. I servizi possono essere specificati in base al nome comune o al nome visualizzato e accettano elenchi e caratteri jolly come valori. Per arrestare lo spooler di stampa, usare:

Stop-Service -Name spooler

Per avviare lo spooler di stampa dopo che è stato arrestato, usare:

Start-Service -Name spooler

Per sospendere lo spooler di stampa, usare:

Suspend-Service -Name spooler

Il Restart-Service cmdlet funziona nello stesso modo degli altri cmdlet del servizio:

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>

Si noti che viene visualizzato un messaggio di avviso ripetuto sull'avvio dello Spooler di stampa. Quando si esegue un'operazione del servizio che richiede tempo, PowerShell invia una notifica che sta ancora tentando di eseguire l'attività.

Per riavviare più servizi, è possibile ottenere un elenco di servizi, filtrarli e quindi eseguire il riavvio:

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...

Questi cmdlet del servizio non hanno un parametro ComputerName , ma è possibile eseguirli in un computer remoto usando il Invoke-Command cmdlet . Il comando seguente riavvia ad esempio il servizio Spooler nel computer remoto Server01.

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

Impostazione delle proprietà del servizio

Il cmdlet Set-Service consente di modificare le proprietà di un servizio in un computer locale o remoto. Poiché lo stato del servizio è una proprietà, è possibile usare questo cmdlet per avviare, arrestare e sospendere un servizio. Il cmdlet Set-Service ha anche un parametro StartupType che consente di modificare il tipo di avvio del servizio.

Per usare Set-Service in Windows Vista e versioni successive di Windows, aprire PowerShell con l'opzione Esegui come amministratore .

Per altre informazioni, vedere Set-Service

Vedi anche