通过命令行更新 Powershell

通过命令行更新 Powershell

我想更新机器的电源外壳版本。可以通过命令行完成吗?

我现在的需求是在 Windows Server 2012R2 上从 PS 4 更新到 PS 5。

我猜想没有一个万能的解决方案可以解决所有 Windows 版本和 PS 版本的问题,而且还存在一些其他问题,例如PS4 需要 Dotnet4.5因此,让我们尽可能简化这个问题,就像上面的前两句话一样。

答案1

运行此命令: iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

然后使用您的参数运行 MSI。

此后您需要更新模块。

或安静模式 iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"

参考:

https://www.thomasmaurer.ch/2019/03/how-to-install-and-update-powershell-6/

https://www.thomasmaurer.ch/2019/02/update-powershellget-and-packagemanagement/

答案2

以管理员身份打开 Powershell 并输入以下命令:

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

如果要更新到最新预览版,请-Preview在末尾添加参数:

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

答案3

我不认为它可以与 PS5 兼容,但对于 Windows 10 和 PS 7+,你可以轻松升级

winget upgrade powershell

并且可以从 powershell 内部执行此操作。

答案4

您必须编写自己的脚本才能执行此操作。没有任何预先编写的脚本可以为您执行此操作而无需您付出任何努力。从网络下载和安装文件是一种非常常见的做法。网上有很多关于如何执行此操作的说明和视频。

翻译:

  1. 您必须转到 Alexandr 指向您的 URL。
  2. 单击下载,进入下一页,获取直接 URL 并保存该链接。
  3. 然后使用 PowerShell Web 命令下载该文件
  4. 然后使用 cmdlet 开始安装或静默安装。

网络上有许多关于如何从网络上下载文件的示例。甚至还有预先构建的示例,您可以查看并根据自己的努力进行调整。

将 MS PowerShell 库视为您的起点。

或者查看 PowerShell 内置和在线帮助中的示例。

# Get parameters, examples, full and Online help for a cmdlet or function

(Get-Command -Name Invoke-WebRequest).Parameters
Get-help -Name Invoke-WebRequest -Examples
Get-help -Name Invoke-WebRequest -Full
Get-help -Name Invoke-WebRequest -Online

(Get-Command -Name Invoke-Command).Parameters
Get-help -Name Invoke-Command -Examples
Get-help -Name Invoke-Command -Full
Get-help -Name Invoke-Command -Online

(Get-Command -Name Start-Process).Parameters
Get-help -Name Start-Process -Examples
Get-help -Name Start-Process -Full
Get-help -Name Start-Process -Online

更新

OP 特别要求...

我现在的需求是在 Windows Server 2012R2 上从 PS 4 更新到 PS 5。

...,而不是 PowerShell Core。

虽然更改为另一个可以接受的答案是可以的,而且我来这里不只是为了收集积分,但是“Ariel D”这个答案对于 Windows PowerShell 更新无效。

正如他在参考文章中指出的那样,该命令适用于 PowerShell Core(PSv6 及更高版本)。该命令不会将 PSv4 更新为 PSv5。它将直接安装/更新 PowerShell Core 到最新版本。

Windows PowerShell 需要完整的 .Net,而 PSCore 仅需要 .Net core。该命令将安装最新版本的 PowerShell Core,并且不会升级或替换 Windows PowerShell。

另外要运行 PowerShell 核心,其可执行文件是执行程序, 不是执行程序。此安装不会将您的 Windows PowerShell 快捷方式、菜单选项等全部更改为 PowerShell Core。它将为其创建一个新的图标/快捷方式,保留所有默认的 Windows PowerShell 图标/快捷方式/设置等。

制作普什作为您的默认设置,您必须进行一些 Windows 菜单和注册表修改。

Windows PowerShell 和 PSCore 是两个独立的环境,旨在并行运行并且 PSCore 尚未与 Windows PowerShell 完全兼容。

最后,根据您在 Windows PowerShell 脚本 5x 及以下版本中执行的操作,由于向后兼容性,这些操作可能根本无法在 PowerShell Core 中运行。因此,您需要重构/重写它们。

例如,在安装了 WinPS 和 PSCore 的 Windows 上,Get-WmiObject 仍将作为 cmdlet 出现,但在 PowerShell Core 中,该操作将失败,因为 PowerShell Core 不支持这些 cmdlet。

例子:

$PSVersionTable.PSVersion

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

 Get-Command -Name '*WMI*' | Format-Table -AutoSize

CommandType Name                    Version      Source
----------- ----                    -------      ------
Function    Get-WmiClassKeyProperty 1.3.6        PowerShellCookbook
Function    Search-WmiNamespace     1.3.6        PowerShellCookbook
Cmdlet      Get-WmiObject           3.1.0.0      Microsoft.PowerShell.Management
Cmdlet      Invoke-WmiMethod        3.1.0.0      Microsoft.PowerShell.Management
Cmdlet      Register-WmiEvent       3.1.0.0      Microsoft.PowerShell.Management
Cmdlet      Remove-WmiObject        3.1.0.0      Microsoft.PowerShell.Management
Cmdlet      Set-WmiInstance         3.1.0.0      Microsoft.PowerShell.Management
Application nvwmi64.exe             0.0.0.0      C:\Windows\system32\nvwmi64.exe
Application WMIADAP.exe             10.0.18362.1 C:\Windows\System32\Wbem\WMIADAP.exe
Application WmiApSrv.exe            10.0.18362.1 C:\Windows\System32\Wbem\WmiApSrv.exe
Application WMIC.exe                10.0.18362.1 C:\Windows\System32\Wbem\WMIC.exe
Application WmiMgmt.msc             0.0.0.0      C:\Windows\system32\WmiMgmt.msc
Application WmiPrvSE.exe            10.0.18362.1 C:\Windows\System32\Wbem\WmiPrvSE.exe

 Get-WmiObject -class Win32_OperatingSystem | Select-Object -Property Caption
Get-WmiObject: The term 'Get-WmiObject' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
 Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -Property Caption

Caption
-------
Microsoft Windows 10 Pro

此外,您在 Windows PowerShell 中习惯使用的某些别名在 PowerShell Core 中也不存在。

例如:

Windows PowerShell

 $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      18362  752


 Get-Alias -Definition Invoke-WebRequest

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           curl -> Invoke-WebRequest
Alias           iwr -> Invoke-WebRequest
Alias           wget -> Invoke-WebRequest


 Get-Alias -Name curl

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           curl -> Invoke-WebRequest

PowerShell 核心

$PSVersionTable.PSVersion

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

 Get-Alias -Definition Invoke-WebRequest

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           iwr -> Invoke-WebRequest

 Get-Alias -Name curl
Get-Alias: This command cannot find a matching alias because an alias with the name 'curl' does not exist.
 Get-Command -Name 'curl'

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     curl.exe                                           7.55.1.0   C:\Windows\system32\curl.exe

相关内容