Il cmdlet PowerShell Start-Sleep o l’alias sleep
è un semplice cmdlet con un unico scopo; mettere in pausa uno script. Quando viene eseguito, nella console PowerShell, in uno script eseguito dalla console o nell’ISE PowerShell, il cmdlet mette in pausa semplicemente uno script o un modulo nella sessione PowerShell dall’esecuzione fino al tempo richiesto in secondi o millisecondi.
Questo cmdlet è semplice ma può essere applicato in diversi modi che permetteranno a noi scripter di mettere in pausa script ben scritti.
Uso di Start-Sleep
Utilizzare il cmdlet Start-Sleep è estremamente facile poiché, dopo tutto, ha solo due parametri! Diciamo che voglio mettere in pausa il mio script perché sto aspettando l’esecuzione di qualche altro processo ambientale. Questo processo impiega circa 10 secondi, e ho bisogno di essere sicuro che il mio script non continui a funzionare prima che l’evento esterno sia finito.
Per mettere in pausa lo script per 10 secondi, dovrei semplicemente usare Start-Sleep -Second 10
. Se voglio essere pignolo, potrei anche specificare il tempo in millisecondi come Start-Sleep -Milliseconds 10000.
Contesto d’esempio
Uno degli usi più comuni di questa cmdlet Start-Sleep è all’interno di un ciclo while
. Un ciclo while
è un costrutto in PowerShell che esegue il codice mentre sta accadendo qualcos’altro. Uno dei migliori usi di un ciclo while
è quello di aspettare che succeda qualcos’altro. Piuttosto che indovinare quanto tempo un processo richiederà ed eseguire questo cmdlet direttamente.
Per esempio, forse hai bisogno di aspettare che un file appaia in una cartella. Forse quel file è stato lasciato lì da qualche altro software. Una volta che il file è nella cartella, avete bisogno di eseguire del codice su di esso. Questo esempio è un eccellente esempio di utilizzo di un ciclo while
e Start-Sleep
.
Nell’esempio qui sotto, il mio codice sta aspettando che il file C:\File.txt
si presenti. Se questo fosse in uno script, metterebbe in pausa lo script fino a quando questo evento si verifica. Tecnicamente, non abbiamo bisogno di Start-Sleep
per fare questo, ma se non usato, questo codice potrebbe paralizzare il vostro computer. La velocità con cui potrebbe controllare continuamente questo file dipenderebbe da PowerShell!
Non abbiamo bisogno di controllare questo file ogni .0455ms. Invece, dovremmo rallentare questo controllo ed eseguire il test solo ogni cinque secondi. Rallentare un ciclo while è un uso eccellente del comando Start-Sleep
.
$filePath = 'C:\File.txt'while (-not (Test-Path -Path $filePath)) { ## Wait a specific interval Start-Sleep -Seconds 5}
Per un esempio di utilizzo di questa cmdlet con una bella barra di progresso, guardate qui.