Domanda

Come faccio a cattura e gestire Ctrl + C in uno script PowerShell? Capisco che posso fare questo da un cmdlet in v2 includendo un override per il metodo Powershell.Stop(), ma non riesco a trovare un analogo per l'uso negli script.

Al momento sto eseguendo cleanup tramite un blocco end , ma ho bisogno di svolgere un lavoro supplementare quando lo script viene annullato (al contrario di correre fino al completamento).

È stato utile?

Soluzione

È possibile utilizzare il metodo descritto in qui sulla PoshCode

Sommario:

Set

[console]::TreatControlCAsInput = $true

quindi il polling per l'input dell'utente utilizzando

if($Host.UI.RawUI.KeyAvailable -and (3 -eq  
    [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character))

Altri suggerimenti

Il documentazione per try-catch-finally dice:

  

Un Infine blocco viene eseguito anche se si utilizza CTRL + C per fermare lo script. A fine        blocco gestisce anche se una parola chiave Exit interrompe lo script all'interno di un fermo        blocco.

Si veda il seguente esempio. Eseguire e cancellarlo premendo ctrl-c.

try
{
    while($true)
    {
        "Working.."
        Start-Sleep -Seconds 1
    }
}
finally
{
    write-host "Ended work."
}

C'è anche una proprietà Stopping su $PSCmdlet che può essere usato per questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top