1

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

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

当我在控制台窗口中使用 PowerShell 时,这非常有效,但是当我在 ISE 中运行 PowerShell 时,PowerShell.Exiting 事件似乎永远不会触发,因为我没有放在那里,无论是通常的东西还是测试代码,永远运行。

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

4

1 回答 1

5

好吧,这真是太奇怪了。

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

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

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

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

(把它和适量的盐一起吃,因为我还没有时间用调试器去追逐它,但我有一个偷偷摸摸的怀疑 ISE 在引擎完成之前关闭它的选项卡......)

于 2013-01-30T14:31:22.327 回答