Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell ISE和PowerShell。正在退出事件_Powershell_Powershell Ise - Fatal编程技术网

PowerShell ISE和PowerShell。正在退出事件

PowerShell ISE和PowerShell。正在退出事件,powershell,powershell-ise,Powershell,Powershell Ise,我正在使用PowerShell.Exiting engine事件保存我的命令历史记录,并在关闭PowerShell会话时进行一些其他整理,将其注册到我的配置文件中,因此: # Set up automatic functionality on engine exit. Register-EngineEvent PowerShell.Exiting -SupportEvent -Action ` { #stuff ... } 当我在控制台窗口中使用PowerShell时,这非常有

我正在使用PowerShell.Exiting engine事件保存我的命令历史记录,并在关闭PowerShell会话时进行一些其他整理,将其注册到我的配置文件中,因此:

# Set up automatic functionality on engine exit.
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action `
{
    #stuff
    ...
}
当我在控制台窗口中使用PowerShell时,这非常有效,但当我在ISE中运行PowerShell时,似乎PowerShell.Exiting事件以某种方式从未触发,因为我在其中输入的任何内容(无论是常规内容还是测试代码)都从未运行过


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

好吧,这太奇怪了

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

如果在已退出的
注册EngineeEvent PowerShell.exit的脚本块中有
写入主机
,或对PowerShell主机的其他输出,则退出ISE时它不会运行(即使退出控制台时工作正常)

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

从与
一起使用的脚本块中删除导致主机输出的所有语句。将EngineeEvent PowerShell注册。退出
,或将输出重定向到其他位置,所有语句都将开始工作


(用适量的盐来处理这个问题,因为我还没来得及用调试器来跟踪它,但我有一种隐秘的怀疑,ISE正在关闭它的选项卡,而引擎还没有完成它…

好吧,这真是太奇怪了

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

如果在已退出的
注册EngineeEvent PowerShell.exit的脚本块中有
写入主机
,或对PowerShell主机的其他输出,则退出ISE时它不会运行(即使退出控制台时工作正常)

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

从与
一起使用的脚本块中删除导致主机输出的所有语句。将EngineeEvent PowerShell注册。退出
,或将输出重定向到其他位置,所有语句都将开始工作


(这需要适量的盐,因为我还没来得及用调试器追踪它,但我有一个偷偷的怀疑,ISE正在关闭它的标签,在引擎使用它之前…

只是为了澄清:你是否在你的ISE配置文件中添加了代码?请记住,ISE有一个单独的配置文件(“Microsoft.PowerShellISE_profile.ps1”),您如何关闭ISE?您需要在控制台上键入exit或使用Alt+F4。当我使用正确的退出方法时,以下内容对我有效。注册EngineeEvent PowerShell.Exiting-SupportEvent-Action{Start Process“Notepad.exe”}是的-我在CurrentUserAllHosts配置文件profile.ps1中有它。还有足够多的其他东西在里面,我可以确保它周围的代码都在执行。get job还显示它已注册。我在我的PowerShellISE配置文件中使用了一个简单的
设置内容-值“Hi”-路径C:\test.txt
操作,当我正常关闭ISE(PS3.0)时,它执行得很好。嗯,很有趣。个人资料可能有问题吗?尝试运行PowerShell_ise.exe-noprofile,然后尝试此操作。只是想澄清一下:您是否在ise配置文件中添加了代码?请记住,ISE有一个单独的配置文件(“Microsoft.PowerShellISE_profile.ps1”),您如何关闭ISE?您需要在控制台上键入exit或使用Alt+F4。当我使用正确的退出方法时,以下内容对我有效。注册EngineeEvent PowerShell.Exiting-SupportEvent-Action{Start Process“Notepad.exe”}是的-我在CurrentUserAllHosts配置文件profile.ps1中有它。还有足够多的其他东西在里面,我可以确保它周围的代码都在执行。get job还显示它已注册。我在我的PowerShellISE配置文件中使用了一个简单的
设置内容-值“Hi”-路径C:\test.txt
操作,当我正常关闭ISE(PS3.0)时,它执行得很好。嗯,很有趣。个人资料可能有问题吗?请尝试运行PowerShell_ise.exe-noprofile,然后尝试此功能。谢谢-此功能非常有用。在我启动记事本时,管道输出为空似乎很管用。我希望可以使用此方法在ISE退出时将当前打开的ISE选项卡($psISE.PowerShellTabs.Files.FullPath)保存到一个文件中,但它没有写入值,而是将该文件置为空白。此时我怀疑$psISE是空的,但我甚至不能
将输出写入文件。我可以使用
添加内容
(或
设置内容
)将内容写入文本文件,但遗憾的是,对$psISE的任何引用都是空的。谢谢-这很有帮助。在我启动记事本时,管道输出为空似乎很管用。我希望可以使用此方法在ISE退出时将当前打开的ISE选项卡($psISE.PowerShellTabs.Files.FullPath)保存到一个文件中,但它没有写入值,而是将该文件置为空白。此时我怀疑$psISE是空的,但我甚至无法将输出写入输出文件。我可以使用添加内容将内容写入文本文件(或