おそらくご存じのとおり、古いWindowsオペレーティングシステムのWSUSで承認または拒否する特定の更新を選択することはできなくなりました。サーバーの場合、一般的に言えば、今月のセキュリティ更新プログラムのロールアップと、すべてのセキュリティおよび「品質」更新プログラムを含む包括的なロールアップの2種類のみです。
サーバーの場合、私はセキュリティ更新の評価と承認のみに関心があり、すべての「高品質」更新を拒否します。ただし、品質とセキュリティの更新は、同じクラスとMSRC分類カテゴリにまとめられているようです。 2つを区別する唯一の方法は、更新タイトル自体(つまり、更新タイトルに「品質」が含まれているかどうか)であるように見えます。
品質とセキュリティの更新の名前は非常に似ており、WSUSビューでそれらを完全に分離する簡単な方法がないため、結局私または他の誰かが不注意に承認してしまうことを恐れています。誤って品質を更新しました。問題を軽減する最良の方法は、すべての品質更新を自動的に拒否することです。
誰かがこれを行う方法を知っていますか?別の解決策は、品質とセキュリティの更新を見分けやすくするWSUSのビューを見つけるか、サーバーの品質の更新を最初からWSUSに表示しないようにすることです。
WSUSサーバーはWindows 2008 R2で、WSUSバージョンは3.2.7600.226です。
このPowerShellスクリプトを使用すると、WSUSのすべての新しい品質更新を自動的にブロックできます。 WSUSサーバーで直接実行する必要があります。スクリプトがどのように機能するかに関しては、最初に、スクリプトはタイトルに「品質」という単語が含まれている未承認のインストール可能な更新プログラムを検索します。そのような更新が見つかると、それらがリストされ、ユーザーは入力プロンプトを介して続行して更新をブロックするかどうかのオプションが与えられます。
[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スクリプトチュートリアル の助けを借りて作成しています。