如何通过 PowerShell 检查是否安装了最新的 Windows 更新?

如何通过 PowerShell 检查是否安装了最新的 Windows 更新?

我有一个安装 PowerShell 脚本,可将 Docker 和其他组件安装到 Windows Server 2016 上。我了解到(艰难的方式),如果未安装最新的 Windows 更新,有时 Docker 会进入非常奇怪的状态并且无法按预期运行。

因此,我想以编程方式在 PowerShell 中检查服务器上是否安装了所有可用/最新的 Windows 更新,然后如果有未安装的可用更新,则向用户显示警告。

所以问题是,如何以编程方式检查是否安装了所有可用/最新的 Windows 更新?

任何帮助将不胜感激。

答案1

我建议准确识别哪些更新是 Docker 正常工作的依赖项,并验证这些更新是否已安装。在 PowerShell 中模拟“检查更新”按钮非常困难。

这些是内置命令,但它们没有记录,只是 WMI 方法调用的包装器。

Get-Command -Module WindowsUpdateProvider

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Get-WUAVersion                                     1.0.0.2    WindowsUpdateProvider
Function        Get-WUIsPendingReboot                              1.0.0.2    WindowsUpdateProvider
Function        Get-WULastInstallationDate                         1.0.0.2    WindowsUpdateProvider
Function        Get-WULastScanSuccessDate                          1.0.0.2    WindowsUpdateProvider
Function        Install-WUUpdates                                  1.0.0.2    WindowsUpdateProvider
Function        Start-WUScan                                       1.0.0.2    WindowsUpdateProvider

文档团队讨论缺乏文档的问题https://github.com/MicrosoftDocs/windows-powershell-docs/issues/139

PowerShell 团队问题讨论损坏的功能 https://github.com/PowerShell/PowerShell/issues/5718

这个人似乎已经弄清楚了如何使用这些命令。 https://richardspowershellblog.wordpress.com/2017/11/17/windows-update-change-in-server-1709/

PS>  $au = Invoke-CimMethod -Namespace root/microsoft/windows/windowsupdate  -ClassName MSFT_WUOperations -MethodName  ScanForUpdates -Arguments @{SearchCriteria="IsInstalled=0"}

PS>  Invoke-CimMethod -Namespace root/microsoft/windows/windowsupdate  -ClassName MSFT_WUOperations -MethodName  InstallUpdates -Arguments @{Updates = $au.Updates}

相关内容