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