【发布时间】:2018-05-08 15:47:56
【问题描述】:
我有一个 .ps1 脚本,一旦 PowerShell 会话结束,该脚本需要执行一些代码来进行清理。我遇到的问题的最简单重现:
function ExitLogic(){
Write-Host 'closing'
}
Write-Host 'started'
Register-EngineEvent `
-SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) `
-Action { ExitLogic }
ExitLogic 永远不会发生。如果我在我的 PowerShell 会话中手动使用exit 命令,如果我单击X 窗口按钮,如果我在cmd.exe 中运行 PowerShell 则不会...我不知所措。 但是,如果我将 Action 参数从引用 ExitLogic 作为函数更改为只是 Write-Host 'inline closing',那么它确实有效。
【问题讨论】:
-
为什么不使用
Finally {}块? -
Write-Host 不是一个很好的证据。使用
[System.Console]::Beep()。 -
@TheIncorrigible1 我没有包含这个细节,但我的用例最终在一个模块中。当事情被关闭时,需要一些自动的东西。
-
@Reza 感谢您的建议!我忘记了控制台哔声。这会更容易检测到它,我通过 CMD 提示符启动 PowerShell,然后我可以
exit而不关闭原始窗口,我将能够看到写入主机的文本。
标签: powershell