Spegnere e riavviare un computer, queste due semplici, in apparenza, operazioni rappresentano, in alcuni casi, la migliore soluzione per determinati problemi del computer, solo che certe persone non lo sanno fare in particolare il riavvio perché quando gli chiedo di farlo, in genere lo spengono e lo riaccendono. Ci sono poi quelli che, per motivi noti forse solo a loro, non li spengono mai, così gli aggiornamenti non si installano, le nuove policy aziendali non vengono recepite e gli eventuali problemi presenti non vengono spazzati via da uno spegni e riaccendi.

In questo articolo vedremo qualche comando alternativo, al solito menu di Windows, da utilizzare con PowerShell per spegnere e riavviare, anche forzatamente, i computer.

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Una prima cosa da fare è, probabilmente, l’abilitazione all’esecuzione degli script che è normalmente disattivata. Se, quando avviate lo script, compare un errore rosso simile a quello che vedete nell’immagine dovete seguire le istruzioni di questo articolo.

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Il comando Restart-Computer riavvia il computer, mentre Stop-Computer lo spegne, tra le principali opzioni ci sono -force che riavvia il computer chiudendo forzatamente tutti i programmi aperti, -confirm chiede di confermare il comando, invece -ComputerName pcX, pcX avvia il comando sui pc remoti (sempre se avete i permessi per farlo).

Restart-Computer

  • Restart-Computer -force
  • Restart-Computer -confirm
  • Restart-Computer -ComputerName pc01, pc02

Stop-Computer

  • Stop-Computer -force
  • Stop-Computer -confirm
  • Stop-Computer -ComputerName pc01, pc02

Ulteriori esempi di opzioni per il comando restart-computer li trovate in questa pagina, mentre stop-computer lo trovate in questa pagina.

Potreste anche utilizzare i comandi in questo semplice formato, ma vediamo ora una piccola raccolta di script trovati in giro per il Web e tradotti in italiano.

Script 1

Si imposta un riavvio del computer dieci secondi dopo aver confermato il messaggio di PowerShell che non è proprio chiarissimo per tutti.

  • $RestartTimer = "10"
  • Write-host "Il computer è in attesa di riavviarsi tra 10 secondi. Salva il tuo lavoro o lo perderai."
  • Start-Sleep -Seconds $RestartTimer
  • Restart-Computer -confirm

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Script 2

Riavvio del computer subito dopo aver cliccato Sì, oppure non eseguirlo dopo aver premuto No.

  • $shell = New-Object -ComObject "Shell.Application"
  • $shell.minimizeall()
  • Add-Type -AssemblyName PresentationCore,PresentationFramework
  • $msgBody = "Il computer richiede un riavvio per potersi aggiornare! Se ritieni di non doverlo fare contatta TurboLab.it per risolvere."
  • $msgTitle = "E' richiesto un riavvio del computer"
  • $msgButton = 'YesNo'
  • $msgImage = 'Question'
  • $Result = [System.Windows.MessageBox]::Show($msgBody,$msgTitle,$msgButton,$msgImage)
  • Write-Host "The user chose: $Result [" ($result).value__ "]"
  • $condition = $Result
  • if ($condition -eq 6)
  • {Restart-Computer}
  • if ($condition -eq 7)
  • {exit}

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Script 3

Riavvio forzato del computer due minuti dopo aver premuto OK

  • $wshell = New-Object -ComObject Wscript.Shell
  • $wshell.Popup("Questo computer si deve riavviare",120,"Riavvio in corso",0x0)
  • $xCmdString = {sleep 120}
  • Invoke-Command $xCmdString
  • Restart-Computer -Force

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Script 4

Riavvio del computer in 60 secondi con qualche icona nel messaggio.

  • $Prompt = New-Object -comobject wscript.shell
  • $Answer = $Prompt.Popup("Attenzione: Riavvio computer previsto in 60 secondi", 60, "Riavvio in corso", 4096 + 48 + 1)
  • Switch ($Answer) {
  • # Accepted #
  • { $Answer -eq 1 } { Start-Sleep -Seconds 60; Restart-Computer -Force }
  • # Cancelled #
  • { $Answer -eq 2 } { Exit 0 }
  • }

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Script 5

Simile allo script precedente solo che spegne il computer dopo 60 secondi

  • $Prompt = New-Object -comobject wscript.shell
  • $Answer = $Prompt.Popup("Attenzione: Spegnimento computer previsto in 60 secondi", 60, "Spegnimento pc in corso", 4096 + 48 + 1)
  • Switch ($Answer) {
  • # Accepted #
  • { $Answer -eq 1 } { Start-Sleep -Seconds 60; Stop-Computer -Force }
  • # Cancelled #
  • { $Answer -eq 2 } { Exit 0 }
  • }

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Script 6

Script molto più semplici che utilizzano il comando shutdown.

  • Shutdown /r /t 180 /c "Questo computer si deve riavviare tra 3 minuti. Salva il tuo lavoro."

Come spegnere riavviare computer PowerShell inviare avviso all’utente

  • Shutdown /s /t 180 /c "Questo computer si deve spegnere tra 3 minuti. Salva il tuo lavoro."

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Dopo il primo avviso ne comparirà un altro a due minuti dal riavvio o spegnimento del computer.

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Script 7

Se vi serve qualcosa di diverso dal classico messaggio di Windows si può utilizzare lo script di Zigul, che si trova in questo articolo, e modificarlo in modo che esegua il comando di riavvio o di spegnimento del computer. In allegato all’articolo trovate quello che ho modificato io per ottenere questo tipo di messaggio.

Come spegnere riavviare computer PowerShell inviare avviso all’utente

Come utilizzare gli script

I comandi visti sino ad ora li possiamo utilizzare per creare uno script da avviare tramite un collegamento sul desktop, con un link che contiene questo comando da eseguire, ovviamente cambiando la posizione del file ps1 con quella scelta da voi: powershell.exe -ExecutionPolicy Bypass -File C:\Users\crazy.cat\Desktop\Riavvio.ps1

Se vi trovate di fronte al classico utente che non riavvia mai il computer, l’esecuzione dello script può essere pianificata così da riavviare, o spegnere, il computer ad un certo orario.

Se siete amministratori della rete, e avete questa possibilità, li potete lanciare direttamente su un computer remoto.