Come mettere in pausa PowerShell (linee guida dettagliate)

Potresti provare a scrivere uno script che richiede l’input dell’utente per essere completato, o talvolta lo script richiede un ritardo per consentire a un altro processo di terminare l’esecuzione per primo.

Il comando più utilizzato per scopi come questo è il cmdlet Start-Sleep . Poiché PowerShell supporta anche i comandi CMD, puoi utilizzare anche i comandi Pause e Timeout .

In questo articolo, abbiamo spiegato l’utilizzo di questi e altri comandi per mettere in pausa in Powershell.

Se volete continuare a leggere questo post su "[page_title]" cliccate sul pulsante "Mostra tutti" e potrete leggere il resto del contenuto gratuitamente. ebstomasborba.pt è un sito specializzato in Tecnologia, Notizie, Giochi e molti altri argomenti che potrebbero interessarvi. Se desiderate leggere altre informazioni simili a [page_title], continuate a navigare sul web e iscrivetevi alle notifiche del blog per non perdere le ultime novità.

Seguir leyendo


Sommario

Come mettere in pausa PowerShell

È possibile utilizzare i metodi seguenti per sospendere PowerShell. Poiché abbiamo incluso sia metodi nativi che non nativi, puoi utilizzarli come appropriato.

Inizio-sonno

Lo scopo del cmdlet Start-Sleep è sospendere l’attività in uno script o in una sessione per un periodo di tempo specificato. Puoi usarlo con i parametri -Seconds e -Milliseconds , come mostrato negli esempi seguenti.

Per sospendere l’attività per 5 secondi
Start-Sleep -Seconds 5

Per sospendere l’attività per 200 millisecondi
Start-Sleep -Milliseconds 200

Per sospendere l’attività per 4,3 secondi, puoi utilizzare una delle seguenti opzioni:
Start-Sleep -Seconds 4.3
Start-Sleep -Milliseconds 4300
Start-Sleep -Seconds 4 -Milliseconds 300

Puoi anche utilizzare gli alias PowerShell integrati. Puoi usare sleep e -s al posto rispettivamente di Start-Sleep e -Seconds . Quindi, il comando precedente può essere scritto come:
Sleep -s 4.3

Infine, puoi premere CTRL + C per uscire da Start-Sleep .

Read-Host

Lo scopo del cmdlet Read-Host è leggere alcuni input dalla console e, così facendo, mette in pausa lo script. Viene normalmente utilizzato per richiedere all’utente di inserire dati come password, nomi utente, ecc.

Ad esempio, il comando seguente richiede all’utente di inserire il proprio nome e l’input viene salvato nella “variabile $Name”.
$Name = Read-Host "Enter Your Name"

Se lo usi per richiedere all’utente la password, potresti voler aggiungere i parametri -AsSecureString o -MaskInput alla fine per visualizzare gli asterischi al posto della password.

Console.ReadKey

Il metodo Console.ReadKey() viene spesso utilizzato per sospendere l’esecuzione del programma finché l’utente non preme un tasto. Ad esempio, se stai tentando di mettere in pausa il programma fino a quando l’utente non preme Invio, lo useresti come tale:
Console.ReadKey().Key != ConsoleKey.Enter

RawUI.ReadKey

Il metodo RawUI.ReadKey è simile al metodo Console ReadKey, ad eccezione del fatto che puoi utilizzare alcune altre opzioni con questo metodo. Queste opzioni sono:

AllowCtrlC : consente l’elaborazione di CTRL + C come sequenza di tasti invece di causare un evento di interruzione.
IncludeKeyDown – Include gli eventi key down (attivati ​​quando viene premuto un tasto).
IncludeKeyUp : include gli eventi key up (attivati ​​quando l’utente rilascia un tasto sulla tastiera).
NoEcho : non visualizza il carattere del tasto nella finestra quando viene premuto.

Si noti che deve essere incluso uno tra IncludeKeyDown o IncludeKeyUp o entrambi. Detto questo, puoi utilizzare questo metodo con le opzioni in quanto tali:
$host.UI.RawUI.ReadKey('AllowCtrlC,IncludeKeyDown')

Thread.Dormire

Il metodo Thread.Sleep sospende il thread corrente per un periodo di tempo specificato. È possibile utilizzare questo metodo con un argomento millisecondsTimeout o un oggetto TimeSpan, come mostrato di seguito.

Nell’esempio seguente, il thread corrente viene messo in pausa per 3,5 secondi
[System.Threading.Thread].Sleep(3500)

In alternativa, puoi inserire il valore sotto forma di giorni, ore, minuti, secondi e millisecondi come mostrato di seguito:
[System.Threading.Thread].Sleep([TimeSpan]::New(0, 0, 0, 3, 500))

Set-PSBreakPoint

Il cmdlet Set-PSBreakpoint viene utilizzato per il debug degli script di PowerShell. Viene usato per impostare i punti di interruzione in cui PowerShell interrompe temporaneamente l’esecuzione e passa il controllo al debugger.

È possibile impostare tre tipi di punti di interruzione con questo cmdlet; Punto di interruzione riga, Punto di interruzione comando e Punto di interruzione variabile. I casi d’uso per questo sono innumerevoli, quindi ti consigliamo di controllare la documentazione Set-PSBreakPoint di Microsoft per ulteriori dettagli.

Aspetta-lavoro

È possibile utilizzare il cmdlet Wait-Job per attendere che un processo specificato o tutti i processi si trovino in uno stato di interruzione (completato, non riuscito, interrotto, sospeso o disconnesso) prima di continuare l’esecuzione.

Nell’esempio seguente, il cmdlet sospenderà lo script di PowerShell finché Job1 non si trova in uno stato di interruzione.
Wait-Job -Name "Job1"

Per fare lo stesso per tutti i lavori, puoi usare:
Get-Job | Wait-Job

È inoltre possibile utilizzare l’opzione -Timeout per specificare in secondi il tempo di attesa per il completamento del processo prima che si verifichi un timeout e lo script riprenda l’esecuzione.

Di più

Nel caso in cui si esegua un comando o uno script che visualizza una grande quantità di output, è possibile utilizzare il comando more per mettere in pausa dopo la visualizzazione di una schermata dei risultati.

Ad esempio, per visualizzare la prima schermata di informazioni da un file denominato testfile.new , puoi utilizzare:
more < testfile.new

Puoi anche reindirizzare a more come tale:
type testfile.new | more

Comandi Pausa e Timeout

Vale la pena ricordare che se si desidera utilizzare i comandi CMD anziché i cmdlet di Powershell, è possibile utilizzare i comandi pause e timeout poiché sono compatibili con Powershell.

Se aggiungi semplicemente il comando pause al tuo script, riceverai il seguente messaggio o un messaggio simile quando viene eseguito:
Premi Invio per continuare...

Puoi invece utilizzare timeout se desideri specificare la quantità di tempo (in secondi) di pausa prima che la sessione continui come tale:
timeout /t 7

Gli utenti possono a volte premere involontariamente un tasto che interrompe bruscamente il timeout. Se preferisci ignorare tali sequenze di tasti, puoi utilizzare l'opzione /nobreak come tale:
timeout /t 7 /nobreak