kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Windows Server 2012のWSUSをPowerShellで管理する。

これはPowerShell Advent Calender 20129日目の日記です。
WSUSが出てから、やりたいことの一つが、PowerShellを使用しての自動管理でした。.NETのインターフェースと参照アセンブリがあったものの、どうも使いづらいというか、使い方がいまいちわからなくて忸怩たる思いをしていました。codeplexやtechnetにもその手のツールやスクリプトがあったようですが、どうもわかりづらかった。
しかし、Windows Server 2012ではちゃんとコマンドレットがサポートされています。どんなものがあるかはこちらをご覧ください(まだ英語)。
Windows Server Update Services Cmdlets in Windows PowerShell
今回私がやりたかったことは「自動的にItaniumプラットフォームのパッチを拒否して、cleanupまで動かす」ことです。WSUS自身のインストールは説明しませんが、簡単です。ではやってみましょう。そうそう、set-executionpolicy Remotesignedを実行しておくことも忘れずに。


忘れてはならないのが、PowerShellコマンドレットの追加です。サーバーの役割から追加しておきましょう。

PowerShell ISEを起動して、コマンドにwsusと入力すると、これだけのコマンドレットがあります。この中のコマンドレットを使って、Itaniumプラットフォームのパッチを拒否するにはこうします。

Get-WsusServerでWSUSサーバーのオブジェクトを取得します。ホストはローカルのWSUSなので、Get-WsusServerにはlocalhostとポート8530を指定しています。環境に合わせて変えてください。
次に、GetUpdates()メソッドを使うと、各パッチの情報が取得されます。ひとつ例を挙げてみましょう。

こんな感じ。GetUpdates()メソッドで取得したオブジェクトをそのままDeny-WsusUpdateに渡せばいいかというと、そうではありません。Deny-WsusUpdateはGet-WsusUpdateコマンドレットのパイプラインの出力結果を前提にしているようです。なので、一つずつ、Get-WsusUpdateで取得して、Deny-WsusUpdateを実行しています。
ただ、困ったことに、このパッチの情報にはプラットフォームを判別する箇所がありません。どちらかしかないでしょう。

  • LegacyNameプロパティにIA64という文字列があるかどうか調べる(ちょっと危ないかも)
  • TitleプロパティにItaniumがあり、x64を「含まない」物があるかどうか調べる。

二番目はなんだと思われるかもしれませんが、実はItaniumとx64で同じバイナリが提供されているパッチがあります。Windows Server 2003用の.NET Framework 1.1が該当します。たとえばこんなの。

WhatIf: 対象 "Microsoft .NET Framework 1.1 SP1 用セキュリティ更新プログラム、Windows Server 2003 for Itanium-based Systems および Windows Server 2003 for x64-based Systems 向け (KB979906)"
に対して操作 "Deny-WsusUpdate" を実行しています。

こういうのは除外してもらわないといけないため、Titleプロパティにx64が入っているものという判断を入れています。
このスクリプトを実行すると、一週間以内に同期したファイルのうち、Itanium専用プラットフォームのパッチを拒否してから、クリーンアップ作業(使わないファイルと拒否された)を行います。
私が管理する環境ではほとんどのパッチを自動承認しているので、同期後の翌日とかに流せば定期的に不要なItaniumパッチをクリーンアップできますね!最後にTIPS。

  • WSUSの評価は絶対仮想マシンでやりましょう(^^;。拒否して戻して、また同期とか面倒です。仮想マシンならスナップショット一発です。
  • 同期させると少なくても40GB位のパッチがダウンロードされます。コンテンツ保存用を多くとってなくて焦りました。ファイル削除もやりたいので、上位からダウンロードはやっていませんでした。
  • 今回は別に使っているWSUSがあったので、そこからパッチをダウンロードするように構成してみましたが、意外と早くなかったです。私の仮想マシンが遅いからかもしれませんが。

これでまた一つ運用の懸念事項が減りました(^^)。あと、実行結果はコンソールに出るのでまとめてメール送信してもいいですね。