Подтвердить что ты не робот

Изящно останавливаясь в Powershell

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

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

4b9b3361

Ответ 1

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

Резюме:

Set

[console]::TreatControlCAsInput = $true

затем выполните опрос для ввода пользователем с помощью

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

Ответ 2

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

A Блок finally работает, даже если вы используете CTRL + C, чтобы остановить script. A Наконец-то      block также запускается, если ключевое слово Exit останавливает script изнутри Catch      блок.

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

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

Ответ 3

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