Pregunta

¿Cómo capturar y manejar Ctrl + C en un script de PowerShell? Yo entiendo que yo puedo hacer esto desde un cmdlet en la versión 2 mediante la inclusión de un reemplazo para el método Powershell.Stop(), pero no puedo encontrar un análogo para su uso en scripts.

Actualmente estoy realizando la limpieza a través de un bloque de end , pero necesito realizar un trabajo adicional cuando se cancela la secuencia de comandos (en contraposición a ejecutarse hasta su finalización).

¿Fue útil?

Solución

Se puede usar el método descrito en aquí en PoshCode

Resumen:

Set

[console]::TreatControlCAsInput = $true

a continuación sondear para la entrada del usuario utilizando

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

Otros consejos

El documentación de try-catch-finally dice:

  

Un último bloque se ejecuta incluso si se utiliza CTRL + C para detener el script. Un último        bloque también se ejecuta si una palabra clave de la salida se detiene la secuencia de comandos desde el interior de un Catch        bloque.

Véase el siguiente ejemplo. Ejecutarlo y cancelarlo pulsando ctrl-c.

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

También hay una propiedad Stopping en $PSCmdlet que se puede utilizar para esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top