[WMI TroubleShoot!] トラブルシュートだ!(1) WMI ログを取ろうぜ (XP,2003,Vista,2008)

みなさんごきげんよう。ういこです。

さっき、学童クラブから電話があって、息子が熱を出したとか…。あうう、どうしようと思ったんですが旦那様にお願いしてしまいました。明日は休んで家から仕事かーと思ったら、明日は旦那様がたまたま計画休みということで、お願いしてしまいそうです。仕事ばかりのお母さんでごめんなさい…。なんだか最近やること多すぎて…。

さて、過日より WMI のサポートを開始しました当チームですが (なんだか冷やし中華みたい) あまり WMI の情報発信をしてないなぁと思いまして、今日は WMI トラブルシュート入門編をお送りしたいと思います。

WMI って何よ?

まず WMI って何よ?という方もいらっしゃると思います。Bing って頂ければきっと、死ぬほど WMI とはという情報があふれていると思います。WMI = Windows Management Interface というもので、Windows を使っている皆様がシステムのたとえばデフォルトのプリンターはどれだとか、Hyper-V 上にたくさんつくった仮想マシンのネットワーク インターフェース カードの情報とか、いろんな情報をとってこれるステキインターフェースです。

なんと、プログラム実行するローカルだけじゃなくて、ほかのコンピュータにもアクセス権などが適切に設定されていればその気になればシャットダウンさせるとか (以下略

WMI の欠点…。

というステキな子…なんですが、残念ながらそんなウマ過ぎる話があるわけなく、超遅いです

残念ながら、実装でこの遅さを何とかしようというのはかなり難しいです。

これが、ネットワーク越しにリモートコンピュータに対して問い合わせしたりすると、ネットワーク処理分の時間までかかっちゃってさぁ大変なんてこと珍しくないです。

1 分なんて、ぶっちゃけ処理によってはむしろ早いといえるくらいです。もう、プログラムはしらせたらおやつ食べて帰ってきたらちょうど終わってるくらいだったりします。

WMI の処理のながれ

プログラムの流れとしては、たとえば WMI をつかった、マイプログラムがあるとしましょう。

これを実行しながらタスクマネージャを起動して見ていると、WMIPrivSE.exe というプロセスがぬ~っと出てくるのがわかります。(もしくは、すでにシステムにこのプロセスがいくつもいる場合があります) それが WMI プロバイダと呼ばれるモノです。

wmi1-10

ここからさらに、Svchost.exe というサービス プロセスと WMIPrivSE.exe がいやらしくプロセス間の垣根を越えて語りあい (Remote Procedure Call = RPC)、結果がマイプログラムに返されてくるのです。

wmi1

wmi2 

かなりややこしい経路ですね。困ったモンですが、これがどのくらい困る羽目になるかというと、ずばりマイプログラムが固まったときのトラブルシュートなどです。

なぜかって?それは、自分のプログラムが固まったのか、それとも WMI の処理中 (WMIPrivSE.exe) で止まったのか、Svchost.exe で止まったのかを切り分けないといけないからです。

まずトラブルシュートだ!(1) WMI ログを取ろうぜ (Windows 2003 まで)

WMI で何か胸騒ぎのアフタースクールな現象が発生したら、まずは何が起こっているかをみてやることからはじめましょう。手っ取り早いのはロギングです。WMI にはログ機能があるんです。どれどれ、見てやろうではないですか。

1. [Windows キー] + [R] キーで [ファイル名を指定して実行(R)..] を召還し、wmimgmt.msc と記入して OK 。

wmi4

2. なんかあっさりした [wmimgmt – [コンソール ルート\WMI コントロール (<マシン名など>)]] が開きます。こいつ、だだっ広い画面のわりに大した表示とかないです。

wmi1-1

3. よそのおうち (マシン) の WMI を覗き見たいあなたは [操作(A)] – [別のコンピュータに接続(C)..] で激しくそれでいてひそやかに接続してやってください。拒否られたら、そのマシンの管理者の人に接続しても怒られないように愛を育んでください。

wmi1-3

4. プロパティ ダイアログが開いたら、[Logging] (日本語版 OS では “ログの収集” タブ) タブをクリックしてみてください。そしたら、”Logging Level” (日本語版 OS では “ログ レベル” コンテナ) のラジオ ボタンを見て見ましょう。規定だと、エラーが発生したときしかとらない (Errors Only) が選択されていますが、Verbose (日本語版 OS は “詳細 (Microsoft トラブルシューティングの追加情報を含む(V))” です)にしてみてください。死ぬほどいっぱい取れると思うので、問題起きたときだけ使ったほうがいいと思います。

wmi8 wmi1-4

規定では、C:\WINDOWS\system32\WBEM\Logs\ にログが出力されます。何か起きてないか、いくつもファイルがあるので見て見ます。

弊社にお問い合わせされる際は、Log レベルをあげてからこの Logs フォルダ配下を圧縮してお送りください。

おまけ : Windows Vista と Windows Server 2008 で WMI ログを取る方法は!?

上記手順で、wmimgmt.msc を Vista、Windows Server 2008 で起動すると、なんだか違和感があると思います。それは外見からして違うわけですが

wmi5

接続してプロパティを見ると…まあ大変! [ ログの収集] タブがないんですよ、奥様! しかも、Windows Server 2003 に接続してもやっぱりないんですのよ。あら困ったわ…。

wmi1-5

きっと、見なかったことにして、Windows Server 2003 などで試したりしてる方いらっしゃいません?…大丈夫、あわてないでください。やり方はございます。以下のとおりです。

1. Windows キー + R キーでファイル名を指定して実行ダイアログを召還してください。wmi1-6

2. レジストリ エディタを開きます。ダイアログに regedit と打ち込んで激しく Enter ボタンを押してやるんです!さあ!

3. “管理者権限で起動したいけど…いい?” と奥ゆかしく聞いてくるので、そのまま有無を言わせずそこは [はい] で!!

4. レジストリ エディタが起動します。

5. 以下の手順でキーを展開します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM

wmi1-7

6. 以下の値が Windows 2003 などでできてた [ログの収集] タブの内容です。

>> Logging キー

0 … 無効

1 … エラーのみ

2 … 詳細 (Microsoft トラブルシューティングの追加情報を含む

>> Logging Directory キー

ログの保存場所。規定ではおなじみの C:\WINDOWS\system32\WBEM\Logs\

7. レジストリ エディタを閉じます。

****

いかがでしたでしょうか。

本日は力尽きたので、まずトラブルシュートだ! (2) は次回お送りします。

そういえば、今家で熱をだしてうなっているはずの息子(小学校一年生)は、イカれたことをよくいいます。先日学童クラブのお迎え当番で一緒に帰っていたら、「かあちゃん、俺、すげぇ強いんだよ」と誇らしげにいうので、ほう、どれくらい強いのか言いたまえと言ってみたら、

おれって ヘ ラ ク レ ス オ オ カ ブ ト く ら い 強 い ん だ ぜ

というのです orz …それって人類最弱ってことでは…。指摘したら、「角は指に刺さると、痛いんだぜ(← なぜか得意げ)」とのことでした。私もヘラクレスオオカブトくらい心が強いといいのですが。

それではまた~

ういこう@微妙にナーバスな気分