Come gestire i servizi in PowerShell

  1. Elenca i Servizi in PowerShell
  2. Trova Servizi Remoti in PowerShell
  3. Avvia e Ferma Servizi in PowerShell
  4. Riavvia Servizio in PowerShell
  5. Cambia il Tipo di Avvio di un Servizio in PowerShell
Come gestire i servizi 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
Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
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

Articolo correlato - PowerShell Service