将 powershell 更新到最新版本

Update powershell to the latest revision

提问人:sajis997 提问时间:3/4/2020 最后编辑:Tonisajis997 更新时间:11/8/2022 访问量:79780

问:

我在不同的机器上有两个不同的 PowerShell 版本。本地的有以下一个:

主要 次要 校订
5 1 17763 1007

虚拟机具有以下一个:

主要 次要 校订
5 1 17763 771

如您所见,它具有相同的值:Major、Minor 和 Build 值,但 Revision 值除外。我不确定它是否是命令失败的幕后黑手:

Register-PSRepository -Name $RepoKeyName -SourceLocation $RepoKeyValue
    -PublishLocation $RepoKeyValue -InstallationPolicy Trusted -Verbose

上面的代码片段在本地计算机上工作正常,但在虚拟机上工作不正常,并且在虚拟机中失败,并出现以下错误:

parameter 'SourceLocation' is an invalid Web Uri. Please ensure that it meets the Web Uri requirements.

这就是为什么我想将虚拟机中的 PowerShell 更新为最新的修订值。怎么做?

PowerShell的

评论


答:

11赞 mklement0 3/4/2020 #1

您永远无法按需更新 Windows PowerShell 安装 - 除非在过去升级到新的主要版本,但 v5.1 是将要发布的最后一个版本,因为 Windows PowerShell 仅处于维护阶段,不会看到新的开发,这与它的继任者跨平台 PowerShell (Core) 7+ 版本不同。[1]

注意:

  • 虽然切换到 PowerShell (Core) 版本[1](所有未来的开发工作都将用于此)通常是可取的,但这样做不是随便就能完成的,需要深思熟虑的决定
    • PowerShell (Core大部分(但不完全向后兼容)与 Windows PowerShell 兼容,并且某些 cmdlet 不可用,除非通过兼容性功能,该功能在性能和类型保真度方面都有其局限性。

    • PowerShell (Core) 与 Windows PowerShell 一起安装,具有不同的 CLI(而不是 )和不同的 SDK请参阅此答案);此外,通过 PowerShell 远程处理面向 PowerShell (Core) 需要显式配置 - 请参阅此答案pwsh.exepowershell.exe


特定于 Windows PowerShell 的注意事项:

v5.1 的修订版作为 Windows 更新的一部分提供

但是,你可以有选择地更新 PowerShellGet 模块,其中定义了导致问题的 Register-PSRepository 命令

虽然通常只运行 ,但从捆绑模块切换到 PowerShell 库中的最新版本时,第一次需要采用不同的方法:Update-Module PowerShellGetPowerShellGet

  • 打开提升的会话(以管理员身份运行)。

  • 执行以下命令(添加以获取详细信息):-Verbose

      Install-Module PowerShellGet -Force
    

-Force 是启用安装,即使已经安装了具有该名称的模块;你可能仍会看到有关下载 NuGet 包提供程序的提示。
请注意,旧的 PowerShellGet 版本将停留在不同的位置,但新版本将优先于它。

初始切换到库安装的版本后,你将能够用于
将来的版本。
Update-Module PowerShellGet


可以使用 Get-Command cmdlet 发现给定命令的源模块;例如:

PS> (Get-Command Register-PSRepository).Module

ModuleType Version    PreRelease Name                                ExportedCommands
---------- -------    ---------- ----                                ----------------
Script     2.1.4                 PowerShellGet                       {Find-Command, Find-DscResource, Find-Module, Find-RoleCapability…}

[1] PowerShell (Core) 7+ 版本可以按需更新 - 但是,从 v7.2.x 开始,PowerShell (Core) 不附带 Windows最初需要手动安装。但是,您现在可以通过 Microsoft Store 应用程序安装和更新它,或者编程方式使用 winget.exe(随 Microsoft Store 应用程序一起提供,最新版本的 Windows 附带):App Installer

  • 初始安装:

    winget install Microsoft.PowerShell
    
  • 后期升级:

    winget upgrade Microsoft.PowerShell
    

注意:用于安装/升级最新的预览版本。Microsoft.PowerShell.Preview

评论

0赞 rellampec 10/19/2022
我还没有尝试过这种方法,还没有。但这似乎是迄今为止最好的答案,(根据其他答案)说安装成功,但没有得到任何进一步的帮助winget install Microsoft.PowerShell$PSVersionTable5.1.19041.revision
1赞 mklement0 10/19/2022
@rellampec,我更新了脚注,提供了有关该方法的更多详细信息,但请注意,它仅适用于跨平台的按需安装 PowerShell (Core) 7+ 版本。问题 - 以及此答案的重点 - 是旧版的、随 Windows 一起提供的、仅维护模式的 Windows PowerShell 版本,其最新和最后一个版本是 v5.1.xwinget.exe
51赞 GaTechThomas 4/11/2021 #2

如果你有 Microsoft 的 winget 应用(Windows 包管理器),则可以运行以下命令以更新到最新版本的 PowerShell:

winget install Microsoft.PowerShell

评论

5赞 mklement0 4/29/2021
这很好,但需要明确的是:这仅适用于 PowerShell (Core) 7+,即按需安装的跨平台 PowerShell 版本,不适用于随操作系统一起提供的仅限 Windows 的 Windows PowerShell 版本,后者无法按需更新(只能通过 Windows 更新间接更新)。
10赞 brnlmrry 11/9/2021
要从 7.1.5 更新到 PowerShell 7.2.0,我必须使用winget upgrade PowerShell
2赞 eksortso 1/19/2022
我必须明确声明从 7.2.0 获取 7.2.1。winget upgrade Microsoft.PowerShell
9赞 Suresh B B 9/5/2021 #3

从命令提示符运行以下命令,等待下载,它将提示安装向导按照说明进行安装。

Invoke-Expression "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

评论

0赞 Rich 1/14/2022
我很好奇 iex 代表什么(Invoke-Expression)。现在我知道了。
1赞 mklement0 10/19/2022
需要明确的是:这仅适用于 PowerShell (Core) 7+,即按需安装的跨平台 PowerShell 版本,而不是问题所涉及的仅限操作系统的 Windows PowerShell 版本。Windows PowerShell 不能按需更新(只能通过 Windows 更新间接更新)。将版本从 Windows PowerShell 切换到 PowerShell (Core) 不仅仅是一个完全向后兼容的更新,还需要仔细规划。
29赞 sanampakuwal 11/21/2021 #4
如果你运行的是 Windows 11 或已在 Windows 10 中更新了应用安装程序。

使用 Windows 程序包管理器 (winget) 更新 PowerShell

winget upgrade Microsoft.PowerShell

您还可以通过 winget 使用以下命令安装 PowerShell

winget install Microsoft.PowerShell

了解更多信息:

评论

0赞 A. R. 9/21/2022
我不得不从 7.2.5 升级到 7.2.6; 报告“没有适用的升级可用”。winget install Microsoft.PowerShellwinget upgrade
1赞 mklement0 10/19/2022
需要明确的是:这仅适用于 PowerShell (Core) 7+,即按需安装的跨平台 PowerShell 版本,而不是问题所涉及的仅限操作系统的 Windows PowerShell 版本。Windows PowerShell 不能按需更新(只能通过 Windows 更新间接更新)。将版本从 Windows PowerShell 切换到 PowerShell (Core) 不仅仅是一个完全向后兼容的更新,还需要仔细规划。
0赞 M Komaei 1/21/2022 #5

解决方案1:转到此链接:

https://github.com/PowerShell/PowerShell/releases/

找到“资产”,然后单击“资产”字。

下载并安装 .msi 链接。


解决方案2:

转到此链接下载 Windows 程序包管理器:

https://github.com/microsoft/winget-cli/releases

找到“资产”,然后单击“资产”字。

下载 : Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

执行下载的文件,然后单击更新。

打开命令提示符或 powershell 并在其上执行以下命令:

winget 安装 Microsoft.PowerShell

如果您有 Mircrosoft.PowerShell,请执行以下命令:

winget 升级 Microsoft.PowerShell


要确定您的 powershell 版本:在 powershell 中执行主机命令。enter image description here

评论

0赞 mklement0 10/19/2022
需要明确的是:这仅适用于 PowerShell (Core) 7+,即按需安装的跨平台 PowerShell 版本,而不是问题所涉及的仅限操作系统的 Windows PowerShell 版本。Windows PowerShell 不能按需更新(只能通过 Windows 更新间接更新)。将版本从 Windows PowerShell 切换到 PowerShell (Core) 不仅仅是一个完全向后兼容的更新,还需要仔细规划。