0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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管理ネタがあるので、書いてみる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?