为什么 PowerShell ISE 中的控制台不使用最新安装的 PowerShell 版本?

Why doesn't Console in PowerShell ISE use the latest installed version of PowerShell?

我最近安装了 PowerShell 6.2。

如果我启动 PowerShell 6 (x64) 命令提示符并且 运行 $PSVersionTable.PSVersion 这就是结果

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
6      2      0

从相同的提示我 运行 ISE 使用 powershell_ise.exe 并且 PowerShell ISE 启动。但是,在 ISE 的控制台中,如果我 运行 $PSVersionTable.PSVersion 它会报告:

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1  

是否有设置来控制 ISE 在何处查找 PowerShell?或者有什么方法可以确保它使用的是安装的最新版本?


更新: 作为安装 PowerShell Core(即版本 6.2)的一部分,我必须安装 Windows Management Framework 5.1。我对 this doc 的理解是,这也应该将 ISE 控制台的 PowerShell 版本升级到 5.1。如上所述,我仍然看到 4.0 版。我错过了什么?

PowerShell 的最新版本是 5.1,这也是您可以在 ISE 中使用的最新版本。

PowerShell 6 也称为 PowerShell Core,在 ISE 中不受支持。您可以下载一个名为 Visual Studio Code 的工具,它可以与 PowerShell 6 (Core) 一起使用。

奖金: 有趣的是,实际上我最近读到一篇关于 PowerShell 7 that Microsoft is currently working on which looks pretty interesting. See here 以及 PowerShell 7 的文章。

更新:感谢@Magnetron 在评论中更新。 PowerShell 7 本周正式发布

希望对您有所帮助!

我使用以下 link 向 Powershell ISE 添加了一个附加组件,它允许您在 Powershell 5 和 6 之间切换。(请参阅“PowerShell ISE 附加命令”)但是,当您关闭 Powershell ISE 并打开一个新会话,您必须再次 运行 脚本,否则选项 'Add-ons' 将不存在。我猜当 Powershell 7 发布时可以使用相同的过程。

Using PowerShell Core 6 and 7 in the Windows PowerShell ISE

VSCode 中还有一项模拟 ISE 的新功能:https://devblogs.microsoft.com/powershell/visual-studio-code-for-powershell-7/

如何在VScode中使用ISE模式:https://www.thomasmaurer.ch/2020/03/how-to-use-powershell-ise-mode-in-visual-studio-code/

我会阅读本指南 - https://ironmansoftware.com/using-powershell-core-6-and-7-in-the-windows-powershell-ise/

它允许 ISE 进程将后端 PowerShell 切换为版本 7。它甚至包括创建菜单项和快捷方式来切换后端版本。这非常方便,我已经将它与 ISE 一起使用了一段时间。

对于那些想要启用此功能的较短版本的人。

运行 这是在 ISE 中(取自 link 来自其他答案)

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Switch to PowerShell 7", { 
        function New-OutOfProcRunspace {
            param($ProcessId)

            $ci = New-Object -TypeName System.Management.Automation.Runspaces.NamedPipeConnectionInfo -ArgumentList @($ProcessId)
            $tt = [System.Management.Automation.Runspaces.TypeTable]::LoadDefaultTypeFiles()

            $Runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($ci, $Host, $tt)

            $Runspace.Open()
            $Runspace
        }

        $PowerShell = Start-Process PWSH -ArgumentList @("-NoExit") -PassThru -WindowStyle Hidden
        $Runspace = New-OutOfProcRunspace -ProcessId $PowerShell.Id
        $Host.PushRunspace($Runspace)
}, "ALT+F5") | Out-Null

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Switch to Windows PowerShell", { 
    $Host.PopRunspace()

    $Child = Get-CimInstance -ClassName win32_process | where {$_.ParentProcessId -eq $Pid}
    $Child | ForEach-Object { Stop-Process -Id $_.ProcessId }

}, "ALT+F6") | Out-Null

然后重新启动您的 ISE 并转到文件、编辑、查看 ant 等旁边的 附加组件 按钮。现在应该有一个切换到 Powershell 7 选项。

就是这样! 1 分钟工作。