【发布时间】:2020-12-03 17:26:02
【问题描述】:
假设我已经使用 Powershell ISE 一段时间了,我的环境空间开始变脏,我需要重新启动交互式 shell...我不想关闭我的编辑器并重新打开它。如何在不关闭并重新打开Powershell ISE的情况下重新启动powershell ISE交互式shell以清除所有变量?
【问题讨论】:
假设我已经使用 Powershell ISE 一段时间了,我的环境空间开始变脏,我需要重新启动交互式 shell...我不想关闭我的编辑器并重新打开它。如何在不关闭并重新打开Powershell ISE的情况下重新启动powershell ISE交互式shell以清除所有变量?
【问题讨论】:
首先,强制性通知:PowerShell ISE 是 no longer actively developed 和 there are reasons not to use it(底部),特别是无法运行 PowerShell [Core] 6+。提供跨平台最佳 PowerShell 开发体验的积极开发的编辑器是Visual Studio Code,结合了它的PowerShell extension。
ISE:
Colin's helpful answer 是一个实用的解决方案:打开一个新标签并关闭旧标签。
但是,新会话总是保留旧会话的环境变量,因为 ISE 托管 PowerShell SDK进程中,而不是将 powershell.exe 作为子进程。
要在 current 选项卡中重新启动会话,您必须指示托管的 System.Management.Automation.PowerShell 实例放弃其当前运行空间并创建一个新运行空间 - 我不知道有什么方法这样做。
但是,即使有可能,环境变量(存在于运行 ISE 的进程级别)也会被保留。
Visual Studio 代码:
可以在 Visual Studio Code 中执行此操作 - 无论是在当前选项卡中还是在不继承旧会话的环境变量的情况下:
当运行的集成终端正在运行PowerShell Integrated Console 时,PowerShell 扩展附带了它 - 相当于 ISE 中的控制台窗格 - 您可以通过单击工具栏中的垃圾桶图标来终止当前实例如下图所示的终端面板。
执行此操作后,系统会自动询问您是否要启动一个新会话,该会话在新的 powershell.exe / pwsh 子进程中运行。
或者,最好 - 您可以将 PowerShell 扩展配置为自动在您开始新的调试会话时启动新会话 >,正如zett42 指出的那样:
或者:打开设置 (Ctrl-,) 视图,搜索 powershell temporary 并打开 PowerShell > Debugging: Create Temporary Integrated Console 设置。
或者:将"powershell.debugging.createTemporaryIntegratedConsole": true 直接添加到您的settings.json 文件中。
这会为每个调试会话自动启动一个新的临时 PowerShell 集成控制台,在您启动下一个调试会话之前,该控制台一直保持打开状态,此时新的临时控制台会简单地替换旧的。
2020.6.0 开始,您不能在 PowerShell 集成控制台中使用 exit,但您也可以使用垃圾桶图标将其杀死,对于 临时 控制台将(值得称赞)不提示您重新启动它;相反,下一个调试会话将按需创建一个新的临时控制台。
此配置避免了困扰 ISE总是(并且可能部分是提示问题的原因)以及 PowerShell 扩展的 默认值 配置:
在那里,代码运行点源,即直接在同一会话的顶级范围内,因此早期调试运行留下的状态会干扰后续调试运行;例如,创建一个内容为 (++$i) 的脚本并重复运行它 - 您会看到 $i 在每次运行时都会递增。
为每次调试运行启动一个新会话可以避免这个问题。
【讨论】:
Ctrl+t 打开一个新的 powershell 选项卡,开始时就好像它是一个新的 powershell 会话。
【讨论】: