Come gestire i servizi in PowerShell
- Elenca i Servizi in PowerShell
- Trova Servizi Remoti in PowerShell
- Avvia e Ferma Servizi in PowerShell
- Riavvia Servizio in PowerShell
- Cambia il Tipo di Avvio di un Servizio in PowerShell

I servizi di Windows sono uno dei temi che quasi ogni amministratore di sistema Windows deve utilizzare. Naturalmente, per gestire i servizi di Windows, potremmo avviare il componente aggiuntivo MMC services.msc
per compiti unici, ma cosa succede se abbiamo bisogno di costruire un po’ di automazione con PowerShell?
Questo articolo discuterà tutti i cmdlet di servizio di PowerShell, li useremo e svilupperemo il nostro script per gestire i servizi su molti computer, localmente o remotamente.
Elenca i Servizi in PowerShell
Uno dei compiti più basilari che possiamo svolgere con Windows PowerShell e i servizi è semplicemente enumerare quali servizi esistono su un computer locale o remoto. Ad esempio, apri PowerShell, esegui il comando Get-Service
e osserva l’output.
Il comando Get-Service
da solo elencherà tutti i servizi sul computer locale e lo Stato
, il Nome
e il NomeVisualizzato
di ciascun servizio.
Get-Service
Output:
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>
Come molti altri cmdlet, PowerShell non restituisce tutte le proprietà per ogni servizio.
Sebbene, ad esempio, ci piacerebbe vedere un servizio richiesto o forse la descrizione del servizio, possiamo trovare queste proprietà passando il risultato al comando Select-Object
e usando il jolly *
per rappresentare tutte le proprietà.
Get-Service ALG | select *
Output:
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 :
Trova Servizi Remoti in PowerShell
Forse siamo su una rete e dobbiamo enumerare i servizi su uno o più computer Windows remoti. Avremmo potuto farlo nei giorni di Windows PowerShell utilizzando il parametro -ComputerName
, ma sfortunatamente, quel parametro non esiste più.
Un modo per ispezionare i servizi Windows su un computer remoto è utilizzare il Remote PowerShell (o PS Remoting). Utilizzare PS Remoting può racchiudere qualsiasi comando locale e invocarlo in una sessione remota proprio come facevamo localmente.
Presumendo che abbiamo abilitato il Remote PowerShell su un computer remoto, potremmo, ad esempio, utilizzare il cmdlet Invoke-Command
per eseguire il comando Get-Service
su un computer remoto.
$cred = Get-Credential
Invoke-Command -ComputerName SRV1 -ScriptBlock { Get-Service } -Credential $cred
Output:
Status Name DisplayName PSComputerName
------ ---- ----------- --------------
Stopped AarSvc_55244 AarSvc_55244 SRV1
<SNIP>
Una volta eseguito, il cmdlet Invoke-Command
passa tutte le informazioni restituite da Get-Service
, e i servizi verranno restituiti come previsto.
Nota la proprietà extra PSComputerName
restituita dal cmdlet Invoke-Command
. Possiamo anche creare un semplice script per enumerare i servizi su molti computer remoti.
Avvia e Ferma Servizi in PowerShell
Possiamo anche avviare e fermare servizi con Windows PowerShell.
I cmdlet Start-Service
e Stop-Service
fanno esattamente quello che ci aspetteremmo. In seguito, possiamo usare la pipeline o il parametro -Name
qui sotto.
## Stop a service
$serviceName = 'wuauserv'
Stop-Service -Name $serviceName
## Stop a service with the pipeline
Get-Service $wuauserv | Stop-Service
Tutti i cmdlet *-Service
ci consentono di completare il nome dei servizi con i parametri -Name
e -DisplayName
. Basta digitare il parametro -Name
seguito da uno spazio e premere il tasto Tab
.
Vedremo che cicla attraverso tutti i servizi sul computer locale. Lo stesso concetto si applica anche per avviare un servizio.
## Start a service
$serviceName = 'wuauserv'
Start-Service -Name $serviceName
## Start service with the pipeline
Get-Service $wuauserv | Start-Service
Sia il comando Start-Service
che il comando Stop-Service
sono idempotenti, il che significa che se un servizio è già avviato o fermato e tentiamo di fermarlo o avviarlo quando sono già in quello stato, i cmdlet salteranno il servizio.
Per fermare e avviare servizi remoti con PowerShell, ancora una volta, dovrai racchiudere questi comandi in un blocco di script e utilizzare il Remote PowerShell per invocarli in remoto, come mostrato di seguito.
$cred = Get-Credential
$serviceName = 'wuauserv'
Invoke-Command -ComputerName SRV02 -ScriptBlock { Start-Service -Name $using:serviceName } -Credential $cred
Riavvia Servizio in PowerShell
Per limitare il riutilizzo del codice per riavviare un servizio con Windows PowerShell, sarebbe meglio utilizzare il cmdlet Restart-Service
. Questo cmdlet fa esattamente quello che pensiamo e opera in modo simile agli altri comandi di servizio.
Ad esempio, se desiderassimo avviare e fermare il servizio wuauserv
come mostrato nell’esempio precedente, potremmo risparmiare un po’ di codice semplicemente passando l’output di Get-Service
direttamente a Restart-Service
, come mostrato di seguito.
## Restart a service with the Name parameter
$serviceName = 'wuauserv'
Get-Service -Name $serviceName | Restart-Service
Cambia il Tipo di Avvio di un Servizio in PowerShell
Il tipo di avvio di un servizio è l’attributo che stabilisce cosa fanno i servizi quando Windows si avvia. Quindi, di nuovo, abbiamo alcune opzioni.
Automatico
: Il servizio si avvia automaticamente quando Windows si avvia.Disabilitato
: Il servizio non si avvierà mai a meno che non venga cambiato.Manuale
: Il servizio può essere avviato ma deve essere fatto manualmente.Automatico – Ritardato
: Il servizio si avvia automaticamente ma è ritardato dopo che Windows si avvia.
Prima di tutto, dobbiamo sapere cos’è un tipo di avvio. Puoi trovare questo con Get-Service
.
Se stai usando Get-Service
per trovare il tipo di avvio, scoprirai che Get-Service
lo chiama Status
ed è rappresentato come la proprietà Status
.
(Get-Service -Name wuauserv | select *).StartType
Output:
Manual
Una volta conosciuto l’attuale tipo di avvio, possiamo cambiarlo utilizzando Set-Service
. L’esempio qui sotto imposta il tipo di avvio su Automatico
.
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