WSUS で更新プログラムを効果的に承認および展開する方法

WSUS で更新プログラムを管理するのは、特に手動で承認して配布するものと保留するものを区別しようとすると、面倒に感じることがあります。あるいは、一部の更新プログラムが承認されたものの、後に問題が発生するという問題が発生し、それらを適切に拒否または削除する方法が必要になることもあります。もしそうなら、ターゲットグループの構成方法と PowerShell を使った自動化方法を理解することが、非常に役立つでしょう。手動の手順とスクリプトが混在しており、少しぎこちなく感じるかもしれませんが、一度コツをつかめば問題なく動作します。試行錯誤が必要で、場合によっては 1 回か 2 回の再起動が必要になるかもしれませんが、その制御性を考えると、その価値は十分にあります。さらに、承認を自動化することで、初期設定後に一日中クリックし続ける手間が省けます。

WSUS の更新プログラム承認でよくある問題を解決する方法 – ステップバイステップ

WSUS でターゲット コンピュータ グループを構成する

これは効率的な更新管理の基盤です。コンピューターをグループに仮割り当てすることで、どのコンピューターに最初にパッチを適用し、どのコンピューターをスキップし、いつ本番環境に移行するかを管理できます。通常、環境はTest_Srv_WSUSTest_Wks_WSUSなどのテストグループと本番環境グループに分けられます。Windows Server で WSUS コンソールを開き、[コンピューター] > [すべてのコンピューター]に移動します。

そこからグループを直接作成するか、ルールに基づいてクライアントが自動で割り当てられるようにしたい場合は、グループポリシーでクライアント側のターゲット設定を有効にできます。グループポリシーのパス:コンピューターの構成 > ポリシー > 管理用テンプレート > Windows コンポーネント > Windows Update > ターゲット設定「クライアント側のターゲット設定を有効にする」を有効にし、グループ名を指定します。これは設定後、手動で更新する必要がないので、作業が楽になるので便利です。

WSUS で更新プログラムを手動で承認および展開する方法

昔ながらの手動承認:迅速とは言えませんが、少なくとも何がいつ配布されるかは確認できます。WSUSコンソール「更新プログラム」に移動してください。ここで概要が表示され、「すべての更新プログラム」 、「重要な更新プログラム」「セキュリティ更新プログラム」などのセクションに分かれています。承認したい場合は、KB番号で検索するか、日付でフィルタリングしてください。

  • 保留中の更新を表示するには、フィルターを適用しますApproval=Unapproved
  • 更新プログラムを右クリックし、[承認]を選択します。
  • 特定のグループ (たとえば、Test_Srv_WSUS ) を選択し、[インストールの承認]を選択します。

私にとっては、特に数十、数百件の更新がある場合は、かなり面倒です。Ctrl+クリックまたはShift+クリックを使えば複数の更新を一度に選択できますが、それでも手作業で面倒です。承認すると、「結果: 成功」という確認メッセージが表示されます。確かに簡単なプロセスですが、一括承認が必要な場合は少し時間がかかります。

設定によっては、この方法が不安定になる場合があります。承認ウィンドウが時々不具合を起こしたり、反映に時間がかかったりするからです。その場合は、しばらく待つか、少し更新してみてください。完了すると、対象のマシンは同期スケジュールに従ってアップデートを反映するようになります。

WSUS で自動更新承認ルールを設定する方法

手動で承認するのが苦手な方(正直言って、そうすべきではないでしょう)は、自動承認を設定するのがおすすめです。待ち時間を減らし、承認忘れのリスクを軽減できます。コンソールで、「オプション」>「自動承認」に進みます。デフォルトのルールは無効になっており、それほど賢くないので、「新規ルール」をクリックして独自のルールを作成してください。

  • 自動的に承認される更新の種類(重要な更新、セキュリティの更新、定義の更新など)を選択します。
  • ターゲット グループ (おそらくTest_Srv_WSUS)を選択し、安定したら運用環境に拡張します。
  • クライアントに更新を強制的に適用する場合は期限を設定します。重要なパッチの場合は期限が必要になることもありますが、意図しない再起動には注意してください。
  • [詳細設定]タブで、WSUS 自体の更新プログラムと、後で外観や分類が変更される可能性のある Microsoft 署名の更新プログラムを自動承認するためのオプションを有効にします。

この設定は通常、毎月第2火曜日に更新がロールアウトされる際に開始されますが、必要に応じてPowerShellを使用して後から手動で開始することもできます。通常は、更新が承認され展開されるだけで、ユーザーがそのことに気づくことはほとんどないでしょう。同期頻度を上げるか、PowerShellを使用して手動で更新を開始すると、特に大規模な環境では、処理速度が向上します。

不適切なアップデートを拒否して削除する

アップデートが、メリットよりもトラブルを引き起こすこともあります。そのような場合は、コンソールで問題のあるアップデートを探し、右クリックして「拒否」を選択します。これは、WSUSに「もうインストールしないで」と指示するようなものです。次に、該当するターゲットグループを選択し、「削除承認」を選択します。しばらく待つと、WSUSはクライアントにそのアップデートをアンインストールするか無視するように指示します。これは、問題が発生した場合の救世主のような存在です。

PowerShell で WSUS 更新を承認する — グラフィカルでは十分でない場合もあるため

クリック操作が面倒だったり、設定が複雑だったりする場合は、PowerShell が面倒な作業を代行します。次のコマンドで WSUS サーバーに接続します。

$WsusServerFqdn='mont-wsus.woshub.com' [void][reflection.assembly]::LoadWithPartialName("Microsoft. UpdateServices. Administration") $wsus = [Microsoft. UpdateServices. Administration. AdminProxy]::getUpdateServer($WsusServerFqdn, $False, '8530')

接続すると、次のようなコマンドを実行できます。

$wsus. GetSubscription().StartSynchronization(); 更新を同期するには、またはグループを一覧するには: $wsus. GetComputerTargetGroups()。特定のグループの更新を承認するには、そのオブジェクトを取得します。例:

$group = $wsus. GetComputerTargetGroups() | ? {$_. Name -eq "Test_WKS_WSUS"} そして、次のように更新を承認します。

$updates = $wsus. GetUpdates() | ? {($_. CreationDate -gt "6/1/2022" -and $_. CreationDate -lt "7/1/2022" -and $_. Title -notmatch ".net Framework" -and $_. PublicationState -ne "Expired") -and ($_. ProductFamilyTitles -eq "Windows" -or $_. ProductFamilyTitles -eq "Office") -and ($_. UpdateClassificationTitle -eq "Security Updates" -or $_. UpdateClassificationTitle -eq "Critical Updates")} foreach ($update in $updates) { $update. Approve("Install", $group) }

少し学習が必要ですが、自動化が得意な方であれば、複数のグループにおける複数の更新の承認をスクリプト化できると画期的なツールになります。さらに、スクリプトを拡張して、特定の基準に基づいて定期的に更新を同期、承認、または拒否することもできます。

WSUSグループ間で承認済み更新プログラムをコピーする – 手動のドラッグアンドドロップは面倒だから

残念ながら、コンソールに承認済みのアップデートをグループ間で直接コピーする組み込みオプションがありません。通常は、承認済みのアップデートを一つ一つ手動で探し、新しいグループに承認するしかありません。特にアップデートが数十個ある場合は、面倒です。

このステップを自動化するために、私が作ったちょっとしたPowerShellスニペットをご紹介します。これは、あるグループで承認済みの更新プログラムをスキャンし、別のグループで同じ更新プログラムを承認するものです。

$WsusServerFqdn='mont-wsus.woshub.com' $WsusSourceGroup = 'Workstation_Test' $WsusTargetGroup = 'WorkstationProduction' [void][reflection.assembly]::LoadWithPartialName("Microsoft. UpdateServices. Administration") $wsus = [Microsoft. UpdateServices. Administration. AdminProxy]::getUpdateServer($WsusServerFqdn, $False, '8530') $Groups = $wsus. GetComputerTargetGroups() $WsusSourceGroupObj = $Groups | Where {$_. Name -eq $WsusSourceGroup} $WsusTargetGroupObj = $Groups | Where {$_. Name -eq $WsusTargetGroup} $Updates = $wsus. GetUpdates() $i = 0 ForEach ($Update in $Updates) { if ($Update. GetUpdateApprovals($WsusSourceGroupObj).Count -ne 0 -and $Update. GetUpdateApprovals($WsusTargetGroupObj).Count -eq 0) { $i ++ Write-Host ("Approving " + $Update. Title) $Update. Approve('Install', $WsusTargetGroupObj) | Out-Null } } Write-Output ("Approved {0} updates for target group {1}" -f $i, $WsusTargetGroup) ちょっと未熟ですが、時間の節約になります。グループ名を少し調整して、テストフェーズ後に実行するだけで準備完了です。承認はPowerShellに直接記録されますが、記録保存のためにテキストファイルにパイプすることもできます。

これでWSUSのアップデート管理のストレスが少しでも軽減されることを願っています。特に数百台のデバイスを抱える大規模な環境では、スクリプトや自動化を活用するのが、様々な問題に対処する最善の方法となる場合があります。この情報が、誰かの作業時間や手間を少しでも軽減してくれることを願っています。