优雅地停留在Powershell

时间:2009-11-10 19:49:43

标签: powershell powershell-v2.0

如何在PowerShell脚本中捕获并处理 Ctrl + C ?我知道我可以通过包含Powershell.Stop()方法的覆盖来从v2中的cmdlet执行此操作,但我找不到用于脚本的模拟。

我正在执行清理via an end block,但是我需要在取消脚本时执行其他工作(而不是运行完成)。

3 个答案:

答案 0 :(得分:40)

try-catch-finally的documentation表示:

  

即使您使用CTRL + C来停止脚本,也会运行Finally块。最后一个        如果Exit关键字在Catch中停止脚本,则也会运行块        块。

请参阅以下示例。运行它并按ctrl-c取消它。

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

答案 1 :(得分:9)

您可以使用here on PoshCode

中描述的方法

要点:

[console]::TreatControlCAsInput = $true

然后使用

轮询用户输入
if($Host.UI.RawUI.KeyAvailable -and (3 -eq  
    [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character))

答案 2 :(得分:1)

Stopping上还有一个$PSCmdlet属性可用于此目的。