如何从 PS 远程会话在服务器核心上启动 Windows 更新?

如何从 PS 远程会话在服务器核心上启动 Windows 更新?

当我通过远程桌面登录 Windows Server 2012 R2 Core 计算机时,我可以通过运行 sconfig.cmd 来触发 Windows 更新。然而,当它在 PS 远程会话中被调用时,它会失败:

Enter-PSSession -ComputerName server2

这就是 sconfig 所抱怨的。它基本上说它找不到特定的注册表值。值得注意的是,微软选择 VBScript 而不是 PowerShell 来编程这个 CLI 界面...

[server2]: PS C:\> sconfig

C:\>echo off
sconfig : FEHLER: Der angegebene Registrierungsschl?ssel bzw. Wert wurde nicht gefunden.
    + CategoryInfo          : NotSpecified: (FEHLER: Der ang...nicht gefunden.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Microsoft (R) Windows Script Host, Version 5.8
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

System wird ?berpr?ft...

[...]

14) Server herunterfahren
15) Zur Befehlszeile wechseln

C:\Windows\System32\de-DE\sconfig.vbs(326, 1) Laufzeitfehler in Microsoft VBScript: Eingabe hinter Dateiende.

通过 PS 远程会话登录时我应该如何/可以启动 Windows 更新?

答案1

您实际上无法通过 winrm/winrs 直接触发该操作。

有点流行的 powershell 模块(PSWindowsUpdate)用于从 Powershell 执行 Windows 更新,并且为了在远程系统上执行更新,它实际上将模块复制到远程系统并在远程系统上安排新的一次性任务。

在invoke-WUInstall.ps1文件中,它有关于远程触发更新的评论。

使用 Invoke-WUInstall 远程调用 Windows Update 安装。它基于 TaskScheduler,因为无法从远程计算机调用 CreateUpdateDownloader() 和 CreateUpdateInstaller() 方法 - E_ACCESSDENIED。

答案2

FWIW,在 Windows Server 2019 上,您可以使用

$u = Start-WUScan
$b = Install-WUUpdates $u

该数组$u告诉您有哪些可用的更新,如果它为空,则说明您已完成。

布尔值$b告诉您是否需要重新启动。 重新启动后,您应该再次扫描更新。

答案3

向最后一条评论的发布者致敬。它有效。

pswidowsupdate从网上获取文件并解压。然后导入模块并运行此代码(该invoke-wsuinstall.ps1文件有示例代码,但我删除了其中的一些内容,它仍然有效):

$Script = {Get-WUInstall -AcceptAll -AutoReboot | Out-File C:\PSWindowsUpdate.log}
Invoke-WUInstall -ComputerName computername -Script $Script
Get-Content \ \ computername\c$\PSWindowsUpdate.log

相关内容