powershell 检查服务器上的 windows 更新

powershell 检查服务器上的 windows 更新

我们有 1000 多台服务器,我们每月都在进行修补活动。我需要检查服务器上的补丁是否已更新,是否可以通过 powershell 根据 Microsoft 安全公告编号(例如 MS14-40)进行检查。

问候,Karthick V

答案1

假设您的环境中有 1000 多台服务器,我假设您有一个 WSUS 实例?您可以使用 powershell 从中获取大量信息。这是我在我们的 WSUS 服务器上使用的代码片段(或通过远程 ps):

$wsus = Get-WsusServer
$servers = @("server1","server17","pol-server3","pol-server4")

$servers | % {
   $servername = $_
   $server = $wsus.GetComputerTargets() | ? { $_.FullDomainName -imatch $servername }
   If ($server) {
      New-Object PSObject -Property @{
         Server = $servername
         Installed = $server.GetUpdateInstallationSummary().InstalledCount
         NotInstalled = $server.GetUpdateInstallationSummary().NotInstalledCount
      }
   }
} | ft -auto

结果:

Server        Installed NotInstalled
------        --------- ------------
server1             144           21
server17            144           21
pol-server3         149           21
pol-server4         100           37

因此,这将检查补丁是否已安装或仍然需要,但不会提供建议哪个每个服务器仍然需要补丁。希望这能有所帮助。

答案2

WMI 过去能够通过 QuickfixEngineering 类查询它们,但我感觉这在 Vista 或更高版本上运行得不是很好:

Get-WMIObject -Class "Win32_QuickFixEngineering" -Computer <computername>

不过,我可能会建议使用 WSUS,假设您通过它集中管理补丁。您可以将 MSRC 编号列添加到“所有更新”视图,报告将告诉您哪些系统安装了它。鉴于这只是一个 SQL 数据库,您可能能够通过 Powershell 构建一些调用来提取这些数据,但目前这有点超出我的理解范围。

答案3

get-hotfix | WHERE {$_.hotfixID -eq 'KB******'}

将为您提供安装时间等的更新。

相关内容