You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下PowerShell远程时如何转发PowerShell.Exiting事件避免二次退出

问题1解答:为什么退出远程会话时不会触发PowerShell.Exiting事件
  • PowerShell.Exiting仅在PowerShell引擎正常有序关闭时触发,通过Enter-PSSession进入的交互式远程会话执行exit退出时,远程端的PowerShell实例由WS-Man服务直接终止,不会走引擎正常退出流程,因此不会触发该事件。
  • 事件转发依赖本地与远程的活跃会话连接,远程会话退出时连接会先断开,即使事件触发也无法成功转发到本地。
  • 手动执行New-Event PowerShell.Exiting是主动注入模拟事件,和引擎自动触发的退出事件逻辑不同,因此手动测试可以收到通知。
问题2解答:一次退出的实现方案

最简单的改法是在原有脚本的Enter-PSSession命令后追加本地退出逻辑,修改后的完整脚本如下:

pwsh -NoExit -Command '
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action {
  Write-Host "Received Exiting"
}
$creds = Get-Credential -UserName sysadm;
$pss = New-PSSession -ComputerName remote-pc -Authentication Negotiate -Credential $creds;
Invoke-Command -Session $pss {
  Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Forward;
}
# 仅修改最后一行,远程会话退出后自动执行本地exit
Enter-PSSession $pss; exit
'

原理说明:Enter-PSSession是阻塞式命令,只有当你退出远程会话回到本地上下文时,才会执行后续的exit命令,直接退出本地pwsh进程,只需执行一次exit即可完成两层会话的退出。

如果你需要更灵活的控制,也可以在本地监听PSRemoting.SessionDisconnected事件,当检测到远程会话断开时自动触发本地退出,效果和上述改法一致。

内容的提问来源于stack exchange,提问作者MrMeszaros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:36:06