我有一个安装 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}