我正在使用PowerShell.Exiting引擎事件来保存我的命令历史记录,并在关闭PowerShell会话时执行其他一些清理工作,在我的配置文件中注册它,如下所示:
# Set up automatic functionality on engine exit.
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action `
{
#stuff
...
}当我在控制台窗口中使用PowerShell时,它工作得很好,但是当我在ISE中运行PowerShell时,似乎PowerShell.Exiting事件永远不会触发,因为我没有放入任何东西,无论是普通的东西还是测试代码,都没有运行过。
这是一个已知的问题吗?如果是,是否有已知的解决方法或替代方案?
发布于 2013-01-30 22:31:22
好吧,这真是太奇怪了。
在完全删除Register-EngineEvent调用之外的配置文件后,我发现它仍然不起作用,我也开始削减其中的内容,并将配置文件的其余部分恢复到原始状态。以下是我的发现:
如果您在Register-EngineEvent PowerShell.Exited的脚本块中具有write-host或PowerShell主机的其他输出,则在您退出Register-EngineEvent PowerShell.Exited时它不会运行(即使在您退出控制台时它运行良好)。
实际上,您针对PowerShell.Exited事件注册的所有脚本块似乎都没有运行,即使是那些不包含任何输出到主机的语句的脚本块也是如此。(这就是为什么当我在上面测试其他人的工作示例时,它们对我无效,除非我在没有运行添加现有事件处理程序的配置文件的情况下启动了PowerShell。)
从与Register-EngineEvent PowerShell.Exited一起使用的脚本块中删除所有导致主机输出的语句,或者将输出重定向到其他地方,它们都会开始工作。
(带上适量的盐,因为我还没有时间去用调试器去追赶它,但我隐约怀疑ISE在引擎完成它之前关闭了它的标签……)
https://stackoverflow.com/questions/14604596
复制相似问题