我们有 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******'}
将为您提供安装时间等的更新。