karthick Asked: 2014-09-16 02:15:06 +0800 CST2014-09-16 02:15:06 +0800 CST 2014-09-16 02:15:06 +0800 CST powershell 检查服务器上的 Windows 更新 772 我们有大约 1000 多台服务器,我们正在进行每月的修补活动。我需要检查服务器上的补丁是否更新,是否可以通过 powershell 根据 Microsoft 安全公告编号(例如 MS14-40)进行检查。 问候, 卡西克五世 windows-server-2008 3 个回答 Voted Best Answer xXhRQ8sD2L7Z 2014-11-20T20:25:45+08:002014-11-20T20:25:45+08:00 拥有 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 因此,这会检查是否已安装或仍需要补丁,但不会建议每台服务器仍需要哪些补丁。希望这可以帮助。 user35213 2014-09-16T02:58:54+08:002014-09-16T02:58:54+08:00 WMI 曾经能够通过 QuickfixEngineering 类查询它们,但我觉得这在 Vista 或更高版本上效果不佳: Get-WMIObject -Class "Win32_QuickFixEngineering" -Computer <computername> 为此,我可能会建议使用 WSUS,假设您通过它进行集中补丁管理。您可以将 MSRC 编号列添加到“所有更新”视图,报告将告诉您安装了它的系统。鉴于这只是一个 SQL 数据库,您可以通过 Powershell 构建一些调用来提取这些数据,但目前这超出了我的范围。 Reaces 2014-09-16T03:05:21+08:002014-09-16T03:05:21+08:00 get-hotfix | WHERE {$_.hotfixID -eq 'KB******'} 将为您提供安装时间等的更新。
拥有 1000 多台服务器,我假设您的环境中有一个 WSUS 实例?您可以使用 powershell 从中获取大量信息。这是我在 WSUS 服务器上使用的一个片段(或通过远程 ps):
结果:
因此,这会检查是否已安装或仍需要补丁,但不会建议每台服务器仍需要哪些补丁。希望这可以帮助。
WMI 曾经能够通过 QuickfixEngineering 类查询它们,但我觉得这在 Vista 或更高版本上效果不佳:
为此,我可能会建议使用 WSUS,假设您通过它进行集中补丁管理。您可以将 MSRC 编号列添加到“所有更新”视图,报告将告诉您安装了它的系统。鉴于这只是一个 SQL 数据库,您可以通过 Powershell 构建一些调用来提取这些数据,但目前这超出了我的范围。
将为您提供安装时间等的更新。