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

PowerShell脚本:如何在窗口关闭时执行指定代码?

在PowerShell中处理窗口关闭时的清理操作

可以实现,try/finally确实无法捕获窗口关闭这种强制终止进程的场景,但可以通过PowerShell引擎事件或.NET进程退出事件来触发指定代码。

方法1:注册PowerShell.Exiting引擎事件

这个事件会在PowerShell进程即将退出时触发,覆盖窗口关闭、进程被终止等场景:

# 定义退出时执行的清理逻辑
$cleanupAction = {
    Write-Host "执行窗口关闭后的清理操作:释放资源、保存状态等"
    # 这里添加你的具体代码,比如关闭打开的文件句柄、删除临时文件
}

# 注册退出事件
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action $cleanupAction

# 模拟主程序运行
try {
    Write-Host "程序运行中,可关闭窗口测试清理逻辑"
    while ($true) { Start-Sleep -Seconds 1 }
}
finally {
    Write-Host "finally块执行(仅正常退出/Ctrl+C时触发)"
}

方法2:监听.NET ProcessExit事件

通过.NET AppDomain的进程退出事件也能实现同样效果:

$cleanupAction = {
    Write-Host "执行进程退出清理操作"
    # 你的清理代码
}

# 注册ProcessExit事件
$eventRegistration = Register-ObjectEvent -InputObject ([System.AppDomain]::CurrentDomain) -EventName ProcessExit -Action $cleanupAction

# 主程序逻辑
try {
    Write-Host "程序运行中..."
    while ($true) { Start-Sleep -Seconds 1 }
}
finally {
    Write-Host "finally块执行"
}

注意事项

  • 清理代码要尽量简洁高效,系统给进程退出的执行时间有限,耗时操作可能无法完成。
  • PowerShell ISE中可能无法触发这些事件,需在普通控制台窗口测试。
  • 若脚本中用到了Exit命令正常退出,try/finally和上述事件都会触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:32:34