WSUSの自動承認規則をPowerShellで制御する方法【配信の分散化】

みなさんこんにちは。ますのです。

WSUS配信により、社内ネットワークが逼迫しインターネットに繋がらない自体が発生した時の恒久対策として、お題をいただきました。

一斉に許可せず、500台ずつ区切って配信とか出来ないかねぇ…。
答えはMicrosoftのブログ内にありましたので、対応内容を書いていきます。
https://blogs.technet.microsoft.com/jpwsus/2016/11/01/rollup-scripting/

WSUSサーバ:自動承認規則の「規則の実行」を行うPowerShellを作成

以下の引用元のPowerShellコードをコピーし、メモ帳アプリ等で「Apply-InstallApprovalRules.ps1」と保存します。

# 引数の指定
Param(
# 承認規則の名前
[Parameter(Mandatory=$True)]
[string]$TargetApprovalRule
)

# WSUS サーバーに接続
[void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”)
$wsus=[Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer()

# 承認規則の取得
$Rule = $wsus.GetInstallApprovalRules() | where { $_.Name -eq $TargetApprovalRule}

# 承認規則の有効化
$Rule.Enabled = $True
$Rule.Save()

# “規則の実行” を行う
$Rule.ApplyRule()

# 承認規則の無効化
$Rule.Enabled = $False
$Rule.Save()

https://msdnshared.blob.core.windows.net/media/2016/11/Apply-InstallApprovalRules.txt

WSUS:コンピュータグループを作成し、配信対象のPCを振り分ける

振り分けの方法は2パターンあります。

  • WSUSサーバ上で手動でコンピュータグループを移動する
  • ADサーバ上でグループポリシーによる自動振り分け設定をする

いずれの方法でやる際も、WSUSサーバ上のコンピュータ>すべてのコンピュータ>コンピュータグループの追加から、任意のコンピュータグループを追加する必要があります。

ADサーバ:グループポリシーでは「クライアント側のターゲットを有効にする」へWSUSに設定したコンピュータグループ名を設定する。
PCをOU毎に配置してあげないと反映してくれないのがネック。どなたかお知恵があればご教示くださいm(_ _)m

2019/9/28追記
GPOのフィルタについて「WMIフィルター」があるよ!とコメントを頂きました!
クエリを作ってフィルタ条件を作るようで、OUがいっぱい増えてしまう運用から変更出来ないか勉強してみます。

WSUS:対象の自動承認規則のチェックを外す

Update Services>オプション>自動承認より、先程のGroup1を自動承認する規則を作成します。規則名はPowerShell実行時に指定するため、分かりやすくしていると良いです!
規則のプロパティは、コンピュータグループ以外はそれぞれの環境に応じて設定します。


※チェックが入っていると、WSUSが同期されたタイミングに自動承認され、指定したタイミングで承認されなくなってしまうため注意!

タスクスケジューラでPowerShellを実行する

最初に作成したPowerShellのファイルを任意のフォルダに保存し実行します。

Apply-InstallApprovalRules.ps1 -TargetApprovalRule <承認をスクリプトから実行する自動承認規則名 (例 : “既定の自動承認規則” )>

ちなみにわたしはログデータも取りたいと思い、以下で設定しています。
タスクスケジューラやコマンドプロンプトの使い方が勉強不足のため、もっと上手な使い方があるかと思いますが参考までに…。

powershell -ExecutionPolicy Unrestricted "C:\task\Apply-InstallApprovalRules.ps1 -TargetApprovalRule Group1 | Out-File -FilePath C:\task\logs\wsusApproval_Group1_%date:~0,4%%date:~5,2%%date:~-2%.txt

タスクスケジューラで日時を指定出来るので、任意のタイミングで承認を行うことが出来ます!つまり、コンピュータグループを分ければ配信の分散化が出来るわけです!

約500〜700台/日を目安に、月〜金の間隔で分けています。
IISの帯域制御も行っているので遅延は発生しなくなりました。

これからWindows10に切り替わっていくため、様子見ではありますが一旦はこちらでしのいでいければいいなと楽観視していきたい気分であります。

最新情報をチェックしよう!