WSUS
WSUSの管理ってみんなどうやっているんだ?
と思うくらい情報が出てこないけど、見つかった情報と
実際の動作からいくつか管理用PowerShellScriptを作っていたりするので
紹介してみる。
あるグループに承認済みの更新を別のグループにも承認する
- 例えば限定テストグループから全部に展開するとか
update_commit.ps1
$_mstGroupName = $args[0]
$_tgtGroupName = $args[1]
$WSUS = Get-WsusServer
$ApprovalTestedGrp = $WSUS.GetComputerTargetGroups().where({$_.Name -eq $_mstGroupName})
$AprovalTgtGrps = $WSUS.GetComputerTargetGroups().where({$_.Name -eq $_tgtGroupName})
if($ApprovalTestedGrp.Length -ne 1){
Write-Error ($_tgtGroupName+"が見つかりません")
exit 1
}
if($AprovalTgtGrps.Length -ne 1){
Write-Error ($_tgtGroupName+"が見つかりません")
exit 1
}
$AprovalTgtGrp = $AprovalTgtGrps[0]
$Updates = $WSUS.GetUpdates();
$MastterGrpId = $ApprovalTestedGrp.Id
$AprovalTgtGrpId = $AprovalTgtGrp.Id
$TgtUpdates = @()
Write-Output ("対象グループ:"+$AprovalTgtGrp.Name + "("+ $AprovalTgtGrpId.ToString() + ")")
$approvalCnt = 0
Write-Output("アップデートの承認処理を開始します")
foreach($update in $Updates){
$_apprs = $update.GetUpdateApprovals()
$_appcnt = ($_apprs | ForEach-Object{if(($_.ComputerTargetGroupId -eq $MastterGrpId) -and ($_.Action -eq [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::Install)){$_}}).Length
if($_appcnt -ne 0){
$_updated = $update.GetUpdateApprovals()
$_updatedCnt = ($_updated | ForEach-Object{if(($_.ComputerTargetGroupId -eq $AprovalTgtGrpId) -and ($_.Action -eq [Microsoft.UpdateServices.Administration.UpdateApprovalAction]::Install)){$_}}).Length
if($_updatedCnt -eq 0){
Write-Output ("「"+($update.Title)+"」を承認しました。")
$update.Approve([Microsoft.UpdateServices.Administration.UpdateApprovalAction]::Install,$AprovalTgtGrp) | Out-Null
$TgtUpdates += $update
$approvalCnt++
}
}
}
if($approvalCnt -eq 0){
Write-Output "追加するアップデートはありませんでした。"
}else{
Write-Output ($approvalCnt.ToString()+ "個のアップデートを承認しました。")
}
exit
powershell.exe update_commit.ps1 TEST AllPC
こんな感じで「TEST」に承認済みの更新を「AllPC」にも承認できる。
これをタスクスケジューラに登録しておけば一定期間内に外さない限り自動で全展開も出来る。
んだけど、ほぼ適用辞めることはないので最初から全展開しても問題ほぼ起きないのでわざわざ使われないのかな?
一応分散してタイミングを変えるとかには使えるけど、あまり分散して適用までの時間を空けちゃうのもアレですし。
次回予告?
他にもPowerShellでのWSUS管理ネタがあるので、書いてみる。