更新Windows上的PowerShell版本
本文介绍了如何更新Windows PowerShell到最新版本5.1以及如何安装(升级)Powershell核心7.3。 PowerShell目前有两个分支:
- 经典Windows PowerShell(最大版本为5.1,不再开发。);
- 新的Powershell核心平台(现在可以使用7.3版)。
尽管PowerShell版本编号始于5.1(6.0、6.1、7.0、7.1之类的),但它们是两个不同的平台。因此,更新Windows PowerShell和PowerShell Core将分别覆盖。
PowerShell Core 7.X是与经典Windows PowerShell最兼容的版本。这意味着您可以轻松地在PowerShell Core中运行旧的PS1脚本文件和CMDLET。
内容:
- 升级到Windows Powershell 5.1
- 如何安装或更新PowerShell Core 7?
- 在远程计算机上安装/更新PowerShell Core
- 通过Windows Update或WSUS更新PowerShell
Windows PowerShell 5.1默认情况下已在所有版本中安装,从Windows 10和Windows Server 2016开始。
您必须手动升级到PowerShell 5.1,以获取早期版本(Windows 7/8.1和Windows 2008 R2/2012)。例如,Windows Server 2012 R2(Windows 8.1)已安装PowerShell 4.0。
让我们尝试将Windows PowerShell版本升级到Windows Server 2012 R2中的5.1。
首先,检查当前的PowerShell版本(屏幕截图显示它是PowerShell 4.0):
$PSVersionTable.PSVersion

要将您的PowerShell版本升级到5.1,请安装Windows管理框架5.1,需要.NET框架4.5.2(或以后)。确保使用此命令安装.NET 4.5.2或更高版本:
(Get-ItemProperty ‘HKLM:SOFTWAREMicrosoftNET Framework SetupNDPv4Full’ -Name Release).Release


在我的情况下,发行版378675表示已安装.NET Framework版本4.5.1。因此,我必须下载并安装最新的.NET Framework 4.8(这是脱机安装程序的链接:https://go.microsoft.com/fwlink/?linkid=208631- ndp48-x86-x64-allos-enu.exe)。
安装.NET 4.8软件包(您需要重新启动计算机):


如果您在没有.NET 4.5.2的情况下安装WMF 5.1,则将无法使用一些PowerShell功能。
下载WMF 5.1对于Windows Server 2012 R2 - Win8.1AndW2K12R2-KB3191564-x64.msu((https://go.microsoft.com/fwlink/?linkid=839516)。
从MSU文件安装Windows Management Framework 5.1。


重新启动服务器后,打开PowerShell.exe控制台,并确保PowerShell版本已更新为5.1。


如果您没有支持的Windows 7或Windows Server 2008 R2,则可以以相同的方式将PowerShell版本从2.0升级到5.1。首先,安装.NET框架4.5.2(或更新),然后WMF 5.1(下载链接与Windows Server 2012 R2的链接不同)。
如何安装或更新PowerShell Core 7?
PowerShell Core是跨平台,并且在主动开发下(与Windows PowerShell 5.1不同)。实际上,PowerShell Core是一个新的平台,该平台与经典Windows PowerShell一起安装在操作系统上。这意味着您无法从Powershell 5.1升级到PowerShell Core 7.3。 PowerShell 7.X与Windows PowerShell 5.1(并排)分开安装在计算机上。
PowerShell Core 6.x和7.x目前可用。建议您始终安装最新版本的PowerShell(当前7.3),除非您需要与Legacy脚本的特殊兼容性。
有几种方法可以在Windows 10和11上升级(安装)PowerShell Core版本:
- 使用PowerShell Core MSI安装程序,可从GitHub下载;
- 使用内置的Windows 10/11软件包管理器Winget;
- 使用Microsoft Store。
接下来,使用将Windows 10 22H2上的PowerShell Core更新为7.3的示例,我们将研究所有这些方法。
使用MSI安装升级PowerShell核心
如果要使用MSI软件包安装PowerShell Core,请转到项目页面https://github.com/powershell/powershell并为您的操作系统版本下载安装程序包。在写作时,PowerShell的最新版本是v7.3.3,日期为2023年2月24日(例如,PowerShell-7.3.3-win-x64.msi或者PowerShell-7.3.3-win-x86.msi)。仅在生产环境中使用稳定或LTS发布。


下载MSI文件并安装。
可用以下安装选项:
- 将powershell添加到路径环境变量
- 注册Windows事件记录清单(为PowerShell事件创建单独的事件查看器日志。
%SystemRoot%System32WinevtLogsPowerShellCore%4Operational.evtx) - 启用PowerShell远程(启用并配置WinRM以备powershell远程)
- 将“打开”上下文菜单添加到Explorer
- 为PowerShell文件添加“使用PowerShell 7”上下文菜单


接下来,您可以通过Windows Update/WSUS启用PowerShell Core的自动更新(请参见下文)。


要使用SCCM/MDT/脚本在安静模式下从MSI软件包中安装PowerShell Core,您可以将命令使用以下参数:
- add_explorer_context_menu_openpowershell
- add_file_context_menu_runpowershell
- enable_psremoting
- register_manifest
- add_path
- disable_telemetry
- USE_MU - 使用Microsoft Update获取PSCORE更新
- enable_mu - 允许通过Windows Update更新PowerShell Core
例如,无声安装的命令可能看起来像这样:
msiexec.exe /package PowerShell-7.3.3-win-x64.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1 ADD_PATH=1 ENABLE_MU=1 ADD_PATH=1
您可以直接从控制台升级Powershell。要安装或升级到最新版本的PowerShell Core,请运行以下命令:
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"
此命令从GitHub下载PowerShell 7.3 MSI文件,然后通过MSI安装程序启动安装。


安装完成后,出现PowerShell Core(PWSH.EXE)窗口。检查PowerShell版本,以确保将其更新为POSH 7.3.3。


使用Winget软件包管理器安装或更新PowerShell Core
如果已安装了Winget软件包管理器,则可以安装或更新PowerShell版本为最新命令:
winget install --id Microsoft.Powershell --source winget
另请阅读:如何在Windows 11中检查您的PowerShell版本
或者,您可以安装PowerShell Core的特定版本:
winget install --id=Microsoft.PowerShell -v "7.1.2" -e
如果您安装了巧克力包装管理器,请使用命令(用于5.1):
choco install powershell -y
choco upgrade powershell -y
或用于PowerShell 7.x:
choco install pwsh -y
choco install pwsh -y
注意不同版本的PowerShell的默认目录:
- Windows PowerShell 5.1:
$env:WINDIRSystem32WindowsPowerShellv1.0 - Powershell Core 6.x:
$env:ProgramFilesPowerShell6 - Powershell Core 7.x:
$env:ProgramFilesPowerShell7
如果在您的计算机上安装了PowerShell 6.x,则$env:ProgramFilesPowerShell6安装PowerShell 7.3时,目录将自动删除。
请注意,PowerShell可执行文件的名称已更改。在Powershell核心中,这是C:程序fileSpowersHell7pwsh.exe。它在开始菜单中具有其图标。
- 为了运行.NET框架的Windows PowerShell,
powershell.exe使用命令 - 要运行.NET基于核心的PowerShell Core,请使用
pwsh.exe


这意味着您在计算机上同时安装了Windows PowerShell 5.1和PowerShell Core 7.3。


要查找设备上安装的PowerShell的版本和构建,您可以检查pwsh.exe文件的版本:
(Get-Command 'C:Program FilesPowerShell7pwsh.exe').Version


这就是您可以在远程计算机上查看文件的版本的方式:
Invoke-Command -Computername computer1 -Scriptblock {(Get-Command 'C:Program FilesPowerShell7pwsh.exe').Version}
Windows PowerShell提供了一种特殊的向后兼容模式,即使您安装了更新版本,也可以运行旧版本的PowerShell版本。您可以使用以下命令来运行PowerShell示例的特定版本,4.0):
C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Version 4
通过Microsoft Store在Windows 10和11上安装PowerShell Core
在Windows 10和11上,您可以通过Microsoft Store安装或更新PowerShell。您可以在商店中手动找到PowerShell应用程序或使用此应用程序关联。
您还可以使用Winget安装PowerShell的商店版本:
winget search powershell --source msstore
winget install --id 9MZ1SNWT0N5D
从Microsoft Store安装PowerShell Core的优点是,App Store会自动检查您已安装的PowerShell版本,并在可用时自动安装更新。
要验证您是否已安装了PowerShell Core的商店版本,请使用命令:
Get-AppPackage Microsoft.PowerShell
Microsoft.powershell_7.3.3.0_x64__8wekyb3d8bbwe软件包已安装在此示例中。


但是,这一事实也有一个缺点,即这样的PowerShell实例将在沙盒环境中运行。


您可以下载appx或msix应用程序文件,并使用Add-AppxPackagePowershell cmdlet。
在远程计算机上安装/更新PowerShell Core
考虑在多台远程计算机上安装或更新PowerShell Core的两个方案。
通过小组政策部署Powershell核心
您可以使用组策略在Active Directory域中集中部署和更新PowerShell Core。使用GPO的功能将MSI软件包部署到域计算机上。
- 下载PowerShell MSI安装文件,然后将其复制到域控制器上的SYSVOL目录;
- 打开域组策略管理控制台(
gpmc.msc),创建一个新的GPO并将其与计算机和服务器链接到OU; - 转到GPO部分计算机配置- >软件设置,创建一个新软件包,并在域中的SYSVOL文件夹中指定PowerShell MSI安装文件的路径(使用UNC路径);

为了更准确地将您的策略定位到域设备,您可以使用GPO WMI过滤器。 - 要更新软件安装的组策略设置,您必须重新启动计算机。新版本的PowerShell将安装在启动的所有计算机上。
如何从命令提示符上更新远程计算机上的powershell?
您可以使用命令行提示符在远程计算机上更新PowerShell。
- 第一个方法使用共享网络文件夹中的MSI安装程序来远程更新计算机上的PowerShell:
Invoke-Command -ComputerName mun-srv01 -ScriptBlock {Start-Process msiexec.exe -ArgumentList '/package "\mun-fs01installPowerShell-7.3.3-win-x64.msi" /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1' -Wait}
- 以下脚本选择了从Active Directory域运行Windows 10的所有已启用计算机,并开始在其中每个下载和安装PowerShell Core:
$ADComputers = Get-ADComputer -Filter 'operatingsystem -like "*Windows 10*" -and enabled -eq "true"'您必须在计算机上安装Active Directory PowerShell模块以使用GetAdcomputer CMDLET。
ForEach ($computer in $ADcomputers) {
Invoke-Command -ComputerName $computer {iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"}
}
连接到远程计算机时使用powerShell远程命令时要注意(使用Enter-PSSession和Invoke-Commandcmdlets)。如果您需要连接到PowerShell 7端点,则必须使用命令:
Enter-PSSession -ComputerName dc01 -ConfigurationName "powershell.7"
否则,您将连接到5.1端点的PowerShell。
通过Windows Update或WSUS更新PowerShell
在PowerShell Core 7.2版之前,PWSH.EXE未自动更新。新版本发布后,控制台中只有一条通知:
A new PowerShell stable release is available. Upgrade now, or check out the release page at: https://aka.ms/PowerShell-Release?tag=v7.1.3


从版本7.2开始,PowerShell Core通过Windows Update(Microsoft Update,Windows For Business,Internal WSUS Server或SCCM)支持自动更新。为此,您必须在安装MSI软件包期间启用适当的选项。
检查更新Windows时,接收其他Microsoft产品的更新现在,在设置 - >更新和安全性 - > Windows Update->高级选项下启用了选项。


管理员可以通过组策略设置配置更新安装选项。
现在,当您单击检查更新按钮或通过PSWindowSupDate模块运行更新扫描,您还将收到PowerShell Core的更新。


