如何在PowerShell脚本中捕获并处理 Ctrl + C ?我知道我可以通过包含Powershell.Stop()
方法的覆盖来从v2中的cmdlet执行此操作,但我找不到用于脚本的模拟。
我正在执行清理via an end
block,但是我需要在取消脚本时执行其他工作(而不是运行完成)。
答案 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
属性可用于此目的。