PowerShell检查服务器上的Windows更新

我们有1000多台服务器,我们正在做每月补丁活动。 我需要检查修补程序是否在服务器上更新,是否可以通过PowerShell基于Microsoft安全公告编号(例如,MS14-40)进行检查。

问候,Karthick V

有了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 

因此,这将检查补丁是否安装或仍然需要,但不会build议每个服务器仍然需要哪些补丁。 希望这可以帮助。

WMI曾经能够通过QuickfixEngineering类来查询它们,但我有一种感觉,这在Vista或更高版本上效果不佳:

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

对于这个,虽然我可能会build议使用WSUS,假设你有集中的补丁pipe理。 您可以将MSRC号码列添加到“所有更新”视图,报告将告诉您哪些系统已经安装。 鉴于这只是一个SQL数据库,您可能可以通过Powershell构build一些调用来将这些数据取出,但目前这种情况已经超出了我的视线。

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

会给你更新安装时间等