Вопрос

Как поймать и справиться Ctrl+С в сценарии PowerShell?Я понимаю, что могу сделать это с помощью командлета в версии 2, включив переопределение для Powershell.Stop() метод, но не могу найти аналога для использования в скриптах.

Сейчас я выполняю очистку через end блокировать, но мне нужно выполнить дополнительную работу при отмене сценария (а не до его завершения).

Это было полезно?

Решение

Вы можете использовать метод, описанный на здесь, на PoshCode

Краткое содержание:

Набор

[console]::TreatControlCAsInput = $true

затем опросите ввод пользователя, используя

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

Другие советы

А документация для try-catch-finally говорит:

Блок «Наконец» выполняется, даже если вы используете сочетание клавиш CTRL+C для остановки сценария.Наконец -то блок также работает, если ключевое слово выхода останавливает сценарий из блока подъема.

См. следующий пример.Запустите его и отмените, нажав ctrl-c.

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

Существует также Stopping недвижимость на $PSCmdlet который можно использовать для этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top