WSUSでいらない更新を消す
WSUSのアップデートファイルは「未承認」にした上で
クリーンアップウィザードを動かすと消えてくれる。
ファイルが貯まってくるとなかなかのサイズになるので
自動で不要なアップデートを未承認状態にしたい。
いらない更新とは?
様々な条件があるかもしれないけど
『置き換える更新があり、かつ、その置き換える更新が承認済みである。』
とすると以下のスクリプトで設定できる。
function chkSupersededUpdatesApproval($update){
if($update.IsSuperseded -eq $true){
$supersedUpdates = $update.GetRelatedUpdates([Microsoft.UpdateServices.Administration.UpdateRelationship]::UpdatesThatSupersedeThisUpdate)
foreach($superUpdate in $supersedUpdates){
if($superUpdate.IsApproved -eq $true){
#置き換え更新が承認済み
Write-Host ('┗「'+$superUpdate.Title+'」が承認済みです')
return $true
}else{
if($superUpdate.IsSuperseded -eq $true){
#さらに置き換える更新をチェック
$upperSupersedUpdates = chkSupersededUpdatesApproval($superUpdate)
if($upperSupersedUpdates -eq $true){
return $true
}
}
}
}
}
return $false
}
$WSUS = Get-WsusServer
$updates = $WSUS.GetUpdates()
$declineCnt=0
$notApprovalCnt=0
foreach($update in $updates.Where({$_.IsDeclined -ne $true -and $_.IsSuperseded -eq $true})){
Write-Host ('「'+$update.Title+'」は置き換える更新があります。')
#拒否されてなくて置き換える更新プログラムがある
$chk = chkSupersededUpdatesApproval($update)
if($chk -eq $true){
#$update.Decline()
Write-Host ('@「'+$update.Title+'」を拒否しました。')
$declineCnt++
}else{
Write-Host '!置き換える更新が未承認です'
$notApprovalCnt++
}
}
Write-Host ($declineCnt.ToString()+'個の更新を拒否しました')
Write-Host ($notApprovalCnt.ToString()+'個の更新は置き換える更新が承認されていません')
例
WSUSのクリーンアップウィザードのチェックを全て入れて実行。
そのあとすぐに実行しても、もちろん何も変わらない
そのあとこのクリプトを実行
823個の更新を未承認状態出来た。
そしてまた、クリーンアップウィザードを実行すると。
152689MB(149GB)減った。
使用容量の変化はこんなん。