Powershell IDE:如何在不离开 Powershell ISE 的情况下重新启动交互式 shell 以清除所有变量?

Bil*_*ore 3 powershell powershell-ise

假设我已经使用 Powershell ISE 一段时间了,我的环境空间开始变脏,我需要重新启动交互式 shell...我不想关闭编辑器并重新打开它。如何重新启动 powershell ISE 交互式 shell 以清除所有变量,而无需关闭并重新打开 Powershell ISE?

在此输入图像描述

mkl*_*nt0 7

首先,强制性通知:


离子选择

科林的有用答案是一个务实的解决方案:打开一个新选项卡并关闭旧选项卡。

但是,新会话始终保留旧会话的环境变量,因为 ISE在进程内托管 PowerShell SDK ,而不是powershell.exe作为子进程运行。

因此,要在当前选项卡中重新启动会话,您必须指示托管System.Management.Automation.PowerShell实例放弃其当前的运行空间并创建一个新的运行空间 - 我不知道有什么方法可以做到这一点。

然而,即使有可能,环境变量(存在于运行 ISE 的进程级别)也将被保留。


视觉工作室代码

可以在当前选项卡启动新会话,并且无需 继承旧会话的环境变量

当运行的集成终端正在运行PowerShell 扩展附带的 PowerShell 集成控制台(相当于 ISE 中的控制台窗格)时,您可以通过单击终端工具栏中的垃圾桶图标来终止当前实例面板如下图所示。

执行此操作后,系统会提示您启动一个会话,该会话在新powershell.exe/pwsh 子进程中运行。

杀死 VS Code 中正在运行的 shell

或者 - 并且最好-您可以将 PowerShell 扩展配置为在启动新的调试会话时自动启动新会话,如zett42指出的:

  • 或者:打开“设置”( Ctrl-,) 视图,搜索powershell temporary并打开该PowerShell > Debugging: Create Temporary Integrated Console设置。

  • 或者:"powershell.debugging.createTemporaryIntegratedConsole": true直接添加到您的settings.json文件中。

这会自动为每个调试会话启动一个新的临时 PowerShell 集成控制台,该控制台将保持打开状态,直到您启动下一个调试会话,此时新的临时控制台将替换旧的控制台。

  • 奇怪的是,从扩展版本开始2022.11.0,您无法exit退出 PowerShell 集成控制台,但您可以使用垃圾桶图标或在需要时终止它,在临时Stop-Process -Id $PID控制台的情况下(值得称赞的是)不会提示您重新启动它; 相反,下一个调试会话将根据需要创建一个新的临时控制台。

此配置避免了始终困扰 ISE 的主要陷阱(并且可能部分是引发问题的原因)以及 PowerShell 扩展的默认配置:

  • 在那里,代码以点源方式运行,即直接在同一会话的顶级范围中运行,因此早期调试运行留下的状态可能会干扰后续调试运行;例如,创建一个包含内容的脚本(++$i)并重复运行它 - 您会看到$i每次运行都会增加。

  • 为每次调试运行启动新会话可以避免此问题。