WSUS に登録されているコンピュータ名をメッセージ ボックスに出力するサンプル コード
Try Dim server As IUpdateServer Dim computers As ComputerTargetCollection server = AdminProxy.GetUpdateServer computers = server.GetComputerTargets For Each computer As IComputerTarget In computers MessageBox.Show(computer.FullDomainName, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information) Next Catch ex As Exception MessageBox.Show(ex.ToString, "error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try
try - Catch で GC の手続きをするのは王道ですよね。
まず変数を定義し、
server = AdminProxy.GetUpdateServer computers = server.GetComputerTargets
ここで参照先サーバーを指定。このやり方では、ローカルの WSUS サーバーが自動的に指定されます。
computers 変数には、GetComputerTargets によって、server 変数にて参照するサーバーの管理対象コンピュータのコレクションが指定されます。
for each でコレクションに対してループさせ、computer 変数にコンピュータ名をストリーム式に投入。順次 MessageBox にて出力します。
コンピュータの台数が増えるととても人間では処理しきれなくなるので注意。
こんな感じで API いじれます。サンプルコードを見ながら、1 日頑張ってみた成果でした。
コード実行するときの注意事項
まず、次の 3 つの DLL が必要みたい。
- microsoft.updateservices.administration.dll
- microsoft.updateservices.common.dll
- microsoft.updateservices.stringresources.dll
ネットワーク経由でコマンドを実行すると、.NET Framework に「信頼されてない」と怒られます。ちょっとカルチャーショック。
こんな感じのエラーが出てきました。
Visual Basic は嫌い、Visual C# がいい
コード作ってて思うのは、やっぱり C 言語を学生時代ずっと触ってきたので、今更 Basic だとしんどい、ということです。Strings 出力するときに改行コードを "\n" とか書きたくなるのはもはやサガです。というか Visual Basic で改行コードをどうやって書くのか判らない。昔調べた記憶もあるのだけど忘れたし。
こんな感じなんでちょっとしんどかったり。
あー C# 使っとけばヨカッタかも。。。