正如您可能知道的那样,现在无法select特定的更新来批准或拒绝较旧的Windows操作系统的WSUS。 对于服务器,通常来说,现在只有两种types:一个月的安全更新汇总,一个全面的汇总,包括所有的安全和“质量”的更新。
对于服务器,我只对评估和批准安全更新感兴趣,而且我会拒绝所有“质量”更新。 然而,质量和安全更新似乎被归类在同一类别和MSRC分类类别下。 区分这两者的唯一方法似乎是更新标题本身(即,更新标题是否包括“质量”)。
由于质量和安全更新的名称非常相似,在WSUS视图中我没有看到将它们彼此完全分开的简单方法,所以恐怕最终无论是我还是其他人都会不小心批准质量更新错误。 减轻问题的最好方法就是自动拒绝所有质量更新。
有人知道怎么做这个吗? 另一种解决scheme可能是在WSUS中查找视图,以便更容易区分质量和安全更新,或者首先在WSUS中不显示服务器质量更新。
WSUS服务器是Windows 2008 R2,WSUS版本是3.2.7600.226。
这个powershell脚本可以用来自动阻止WSUS中的所有新的质量更新。 它必须直接在WSUS服务器上运行。 就脚本的工作原理而言,脚本首先在标题中search未经批准的可安装更新,并带有“质量”一词。 如果发现任何这样的更新,则列出它们,并且用户可以通过input提示来select继续并阻止更新。
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(); $updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope # Retrieve only updates that have not yet been approved $updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved # Retrieve only updates that are installable $updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled $totalUpdateCount = $wsus.GetUpdateCount($updateScope) $qualityUpdates = $wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'} $qualityUpdateCount = $qualityUpdates.Length if ($qualityUpdateCount -gt 0) { $qualityUpdates | select title Write-Host "==========================================" $confirmation = Read-Host "$qualityUpdateCount quality updates out of $totalUpdateCount total non-approved installable updates were found. Decline? (y/n)" if ($confirmation -eq 'y') { $wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'} | ForEach { Write-Verbose ("Declining {0}" -f $_.Title) -Verbose $_.Decline() } } } Else { Write-Host "No non-approved installable updates were found." }
如果您想自动拒绝质量更新,请将上述脚本的稍微修改版本作为Windows任务运行。
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(); $updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope # Retrieve only updates that have not yet been approved $updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::NotApproved # Retrieve only updates that are installable $updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled $totalUpdateCount = $wsus.GetUpdateCount($updateScope) $qualityUpdates = $wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'} $qualityUpdateCount = $qualityUpdates.Length if ($qualityUpdateCount -gt 0) { $wsus.GetUpdates($updateScope) | Where-Object {$_.Title -like '*quality*'} | ForEach { $_.Decline() } }
注意:我使用Boe Prox伟大的WSUS powershell脚本教程的一些帮助来编写上面的脚本。