PowerShell ISE和PowerShell.Exiting事件

问题描述 投票:1回答:1

我正在使用PowerShell.Exiting引擎事件来保存我的命令历史记录,并在关闭PowerShell会话时进行其他一些整理,然后在我的配置文件中注册它:

# Set up automatic functionality on engine exit.
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action `
{
    #stuff
    ...
}

当我在控制台窗口中使用PowerShell时,这非常有效,但当我在ISE中运行PowerShell时,看起来PowerShell.Exiting事件似乎永远不会触发,因为我没有放入任何内容,无论是通常的东西还是测试代码,曾经跑过。

这是一个已知问题,如果是,是否有已知的解决方法或替代方案?

powershell powershell-ise
1个回答
4
投票

嗯,这很奇怪。

在完成在Register-EngineEvent调用之外完全删除配置文件后发现它仍然无法工作时,我也开始减少它的内容,并将配置文件的其余部分恢复到其原始状态。以下是我的发现:

如果write-host的脚本块中有Register-EngineEvent PowerShell.Exited或其他输出到PowerShell主机,则退出ISE时它不会运行(即使它在退出控制台时工作正常)。

实际上,您针对PowerShell.Exited事件注册的脚本块似乎都没有运行,即使那些不包含任何输出到主机的语句的脚本块也是如此。 (这就是为什么当我在上面测试其他人的工作示例时,除非我在没有运行添加现有事件处理程序的配置文件的情况下启动PowerShell,否则它们不适用于我。)

从使用Register-EngineEvent PowerShell.Exited的脚本块中删除导致主机输出的所有语句,或者将输出重定向到其他位置,它们都开始工作。

(带上适量的盐,因为我还没来得及用调试器来追逐它,但我有一个潜在的怀疑,ISE正在关闭它的标签,然后发动机完成它...)

© www.soinside.com 2019 - 2024. All rights reserved.