我有一个powershell函数来处理文件列表.我使用begin
,process
和end
块为此:
begin {
# prepate some stuff
}
process {
# process each file
}
end {
# clean up
}
Run Code Online (Sandbox Code Playgroud)
现在,当我点击时Ctrl+C,整个脚本就会终止于它所在的位置.这对于流程部分来说并不是一个问题,因为它只会对最后一个命令进行永久性更改.
但是我仍然想要执行end
块中的内容来清理它,并打印一些有关已经设法处理的文件的统计信息.
是否有一种干净的方法来捕获键盘中断,同时保持开始/进程/结束结构?
一种方法是Ctrl-C在脚本块运行时禁用作为中断的处理。您当然必须手动检查它是否会中断,但它应该保证结束块运行
begin {
[Console]::TreatControlCAsInput = $true
}
process {
# Maybe check for Ctrl-C here to terminate processing
}
end {
[Console]::TreatControlCAsInput = $false
}
Run Code Online (Sandbox Code Playgroud)
为了以Ctr-C非阻塞方式检查输入,您可以执行以下操作
if ([Console]::KeyAvailable) {
$key = [Console]::ReadKey($true)
if ($key.key -eq "C" -and $key.modifiers -eq "Control") {
# Clean up and exit
}
}
Run Code Online (Sandbox Code Playgroud)