优雅地停留在Powershell

Jus*_* R. 26 powershell powershell-2.0

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

我正在通过一个end执行清理,但是我需要在取消脚本时执行额外的工作(而不是运行完成).

sta*_*and 43

try-catch-finally 的文档说:

即使您使用CTRL + C来停止脚本,也会运行Finally块.如果Exit关键字从Catch块中停止脚本,则也会运行Finally块.

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

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

  • @ fatcat111使用布尔标志.例如,在`try`结束时设置`$ didcomplete = $ true`并使用`if($ didcomplete){Write-Host'结束工作进行检查." ``在`finally`里面 (6认同)
  • 不幸的是,如果 PowerShell 控制台窗口关闭,则不会执行 finally 块。 (2认同)

FkY*_*kko 10

您可以使用PoshCode上描述的方法

摘要:

[console]::TreatControlCAsInput = $true
Run Code Online (Sandbox Code Playgroud)

然后使用调查用户输入

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