[Q&A]

そこが知りたい
Windows Server Update Services(第5回)

Q1 残ったままの「ダウンストリーム サーバー」を削除したい

Microsoft MVP
Windows Server System - Microsoft Update Services
創報 山近 慶一
2007/02/08

はじめに

 Windows OSやアプリケーションの脆弱性を修正し、ウイルスや不正アクセスなどからシステムを保護するためには、更新プログラムの適用と管理が重要だ。本連載では、更新プログラムの管理にWindows Server Update Services(WSUS)を実際に活用しているユーザーならではの、よくある疑問や質問をピックアップして回答する。なお、特にバージョンを示さない場合は、最新のWSUS SP1を対象とする。WSUSについては、別稿の「[運用]Windows Server Update Services」も参照していただきたい。

Q&A

質問 残ったままの「ダウンストリーム サーバー」を削除したい

現象の詳細:

 不要になったダウンストリームのWSUSサーバを廃止したところ、アップストリーム・サーバのWeb管理コンソールの[レポート]に、廃止したWSUSサーバが残ったままになってしまった。もう存在しない[ダウンストリーム サーバー]の情報をなんとか削除したい。

回答 ストアド・プロシージャを実行して、データベースからダウンストリーム・サーバの情報を削除する

回答の詳細:

 WSUSシステムは、そこが知りたいWindows Server Update Services(第2回)で解説したように、同期と管理の主従関係を通じて複数のWSUSサーバを階層構造に配置できる。更新元となる上位階層のWSUSサーバが「アップストリーム・サーバ」で、アップストリーム・サーバから更新プログラム情報や更新プログラム・ファイルをダウンロードするのが「ダウンストリーム・サーバ」だ。

 さて、アップストリーム・サーバと同期を実行しているダウンストリーム・サーバを知るには、アップストリーム・サーバのWeb管理コンソールで[レポート]−[設定の概要]を開いて、[ダウンストリーム サーバー]の項目を見てみよう(画面1)。1台のアップストリーム・サーバには、デフォルトでは最大1000台のダウンストリーム・サーバが接続可能で、同期を実行したダウンストリーム・サーバが順次登録されていく。

画面1 ダウンストリーム・サーバの一覧
ダウンストリーム・サーバは、アップストリーム・サーバの[レポート]−[設定の概要]に一覧表示されるが、Web管理コンソールでダウンストリーム・サーバを削除する機能はない。
  [ダウンストリーム サーバー]には、過去にアクセスしてきたダウンストリーム・サーバが一覧表示される

 ところが、ダウンストリーム・サーバの情報は一方的に追加されるばかりで、使われなくなったダウンストリーム・サーバを削除する画面や機能がないのである。正確にいえば、Web管理コンソールにダウンストリーム・サーバの管理機能が搭載されていないだけで、WSUS 2.0 APIのDownstreamServerCollectionクラスにある、AddメソッドやRemoveメソッドを操作すればダウンストリーム・サーバの追加や削除は可能だ。しかしWSUS 2.0 APIは.NET Framework 1.1を利用して構築されているため、VBScriptなどから簡単に利用することはできず、VB.NETなどでのプログラミングが必要になってしまう。WSUS 2.0 APIについては、次のリンクを参照してほしい。

 そこで、もっと簡単な方法を探してデータベースを調べたところ、WSUSサーバが使用するデータベース内のtbDownstreamServerTargetテーブルに、ダウンストリーム・サーバのコンピュータ名や内部ID、同期日時などの情報が蓄積されていて、アップストリーム・サーバがダウンストリーム・サーバから同期要求を受信するたびにレコードを更新していることが分かった。WSUS 2.0は、ダウンストリーム・サーバの情報をレポートで表示する程度しか使っていないので、tbDownstreamServerTargetテーブルからダウンストリーム・サーバのレコードを削除すればよさそうだ。データベースの操作には、WSUSサーバの「%ProgramFiles\Update Services\Tools\osql」フォルダにあるOSQLコマンドを利用できるので、特別なツールを用意する必要はない。

 さらに調査を進めると、クライアント・コンピュータをコンピュータ・グループで管理する機能を流用して、ダウンストリーム・サーバも特定のコンピュータ・グループのメンバとして管理されていることが判明した。クライアント・コンピュータおよびダウンストリーム・サーバとコンピュータ・グループの対応は、tbTargetInTargetGroupテーブルに記録されている。WSUS 2.0では使われていないが、ダウンストリーム・サーバごとに異なる承認状態を設定できる機能が計画されていたのだろう。

 最終的に、ダウンストリーム・サーバの内部IDを引数として、spDeleteDownstreamServerストアド・プロシージャを実行すれば、tbDownstreamServerTargetテーブルとtbTargetInTargetGroupテーブルから、関連するレコードを安全に一掃できることが分かった。従って、不要なダウンストリーム・サーバ情報を削除するには、以下の手順を順に実行すればよい。

手順1――OSQLコマンドでダウンストリーム・サーバの内部IDを表示する

 コマンド・プロンプトを開いてOSQLコマンドを起動し、SQL文を実行して削除したいダウンストリーム・サーバの内部IDを表示する(画面2)。

画面2 ダウンストリーム・サーバの内部IDの取得
まず最初にOSQLコマンドを起動し、SQL文を実行して削除対象のダウンストリーム・サーバの内部IDを取得する。
  コマンド・プロンプトを開いて、「"%ProgramFiles%\Update Services\Tools\osql\osql.exe" -S %ComputerName%\WSUS -E」コマンドを実行し、OSQLコマンドを起動する。%ProgramFiles%環境変数の規定値は「C:\Program Files」フォルダで、%ComputerName%環境変数はコンピュータ名を表している。
  SUSDBデータベースを使用する。
  「SELECT AccountServerID FROM dbo.tbDownstreamServerTarget WHERE AccountName="<削除したいサーバ名>"」というSQL文を実行して、ダウンストリーム・サーバの内部IDを表示させる。「削除したいサーバ名」は、Web管理コンソールに表示される通りに入力しよう。
  WSUSサーバ「wsstd2」の内部IDは、「5BD9DED5-180C-481F-87FB-4E85333273C5」である。表示される内部IDの値は環境ごとに異なる。

手順2――内部IDを引数としてspDeleteDownstreamServerストアド・プロシージャを実行する

 次は、手順1で表示した内部IDを引数として、ストアド・プロシージャを実行する(画面3)。

画面3 spDeleteDownstreamServerストアド・プロシージャの実行
手順1で表示した内部IDを引数としてspDeleteDownstreamServerストアド・プロシージャを実行し、指定したダウンストリーム・サーバの情報を削除する。
  「dbo.spDeleteDownstreamServer "<内部ID>"」ストアド・プロシージャを実行する。
  OSQLコマンドを終了する。

手順3――Web管理コンソールで結果を確認する

 以上で作業は終了である。アップストリーム・サーバのWeb管理コンソールを開いて、指定したダウンストリーム・サーバが削除されていることを確認する(画面4)。もし誤って削除しても、ダウンストリーム・サーバが次回同期を実行するとレコードが再作成される。End of Article

画面4 結果の確認
WSUSのWeb管理コンソールで削除結果を確認する。
  画面1では4台あったダウンストリーム・サーバのうち、最下行にあったWSUSサーバ「wsstd2」が正しく削除されている。
 
 
 運用


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間