Cer*_*ate 1 powershell powershell-ise
我正在使用 PowerShell.Exiting 引擎事件来保存我的命令历史记录并在我关闭 PowerShell 会话时进行一些其他整理,从而将其注册到我的配置文件中:
# Set up automatic functionality on engine exit.
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action `
{
#stuff
...
}
Run Code Online (Sandbox Code Playgroud)
当我在控制台窗口中使用 PowerShell 时,这非常有效,但是当我在 ISE 中运行 PowerShell 时,PowerShell.Exiting 事件似乎永远不会触发,因为我没有放入任何东西,无论是通常的东西还是测试代码,曾经运行。
这是一个已知问题,如果是,是否有已知的解决方法或替代方法?
嗯,这太奇怪了。
在完全删除 Register-EngineEvent 调用之外的配置文件后发现它仍然不起作用,我也开始删除它的内容,并将配置文件的其余部分恢复到其原始状态。以下是我的发现:
如果您有write-hostPowerShell 主机的 或其他输出,则在 的脚本块中Register-EngineEvent PowerShell.Exited,它不会在您退出 ISE 时运行(即使在您退出控制台时它工作正常)。
事实上,没有任何您已注册对PowerShell.Exited事件scriptblocks出现跑,不包含输出到主机中的任何陈述甚至那些。(这就是为什么当我在上面测试其他人的工作示例时,它们对我不起作用,除非我在没有运行添加现有事件处理程序的配置文件的情况下启动 PowerShell。)
从您使用的脚本块中删除导致主机输出的所有语句Register-EngineEvent PowerShell.Exited,或将输出重定向到其他地方,它们都将开始工作。
(用适量的盐来处理它,因为我还没有时间用调试器去追踪它,但我偷偷怀疑 ISE 在引擎完成之前关闭了它的选项卡......)
| 归档时间: |
|
| 查看次数: |
3088 次 |
| 最近记录: |