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

Powershell IDE: How to restart interactive shell to clear all variables without leaving Powershell ISE?

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

Ctrl+t 打开一个新的 powershell 选项卡,就像是一个新的 powershell 会话一样启动。

首先,必须注意的是:PowerShell ISE是no longer actively developed and (bottom section), notably not being able to run PowerShell [Core] 6+. The actively developed editor that offers the best PowerShell development experience, across platforms, is Visual Studio Code, combined with its PowerShell extension.


ISE:

是一个实用的解决方案:打开一个 新标签页 并关闭旧标签页。

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

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

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


Visual Studio代码:

可以在 Visual Studio 代码中执行此操作 - 在当前选项卡中并且不继承旧会话的环境变量:

虽然集成终端 运行ning 正在 运行ning PowerShell Integrated Console,它是 PowerShell 扩展附带的 - 相当于 ISE 中的控制台窗格 - 你可以通过单击终端面板工具栏中的垃圾桶图标来终止当前实例,如下所示。

这样做之后,系统会自动询问您是否要开始一个新会话,运行s 在新的 powershell.exe / pwsh child 中进程.

或者 - 最好 - 您可以将 PowerShell 扩展配置为 自动 启动新会话 每当您开始新的调试会话时,正如zett42指出的那样:

  • 任一:打开设置(Ctrl-,)视图,搜索powershell temporary并打开PowerShell > Debugging: Create Temporary Integrated Console设置。

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

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

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

此配置避免了影响 ISE 总是 的主要陷阱(并且可能部分是提示问题的原因)以及PowerShell 扩展的 默认 配置:

  • 那里,代码 运行s 点源,即直接在同一会话的顶级范围内,因此 之前留下的状态调试 运行s 会干扰后续调试 运行s;例如,创建一个包含 (++$i) 和 运行 内容的脚本,它会重复 - 您会看到 $i 每次递增,跨越 运行s。

  • 每次调试都启动一个新会话 运行 可以避免这个问题。

尝试以下任一方法清除变量内存,应该会有帮助

exit     # Exit will quit from Powershell. 


Get-Variable -Exclude PWD,*Preference | Remove-Variable -EA 0 # this will kill all the memory on current session