当用户中断powershell脚本时,是否有一种方法可以捕获?
我需要退出一个PSSession。
我使用try finally进行测试,但当脚本被中断时,finally不执行Ctrl+c
try
{
$s = New-PSSession -ComputerName MYCOMPUTER -Credential (Get-Credential -Credential admin )
Invoke-Command -ScriptBlock { Get-EventLog -LogName Application } -Session $s
}
catch [Exception]
{
}
finally
{
echo "Ending the session"
Remove-PSSession $s
}
据我所知,当PowerShell结束时不存在运行的脚本。但是你可以看看System.Management.Automation.PsEngineEvent类,它提供了你可以用Register-EngineEvent
CmdLet订阅的事件。
所以运行PowerShell命令行并执行:
Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Action {[console]::Beep()}
然后关闭PowerShell命令行(退出或点击右上角),你会听到一些东西。注意,如果PowerShell进程被杀死(例如使用任务管理器),事件不会被触发。