LinuxからWMI経由でWindowsの情報を取得/プログラム実行してみる


Linuxから、WMI経由でWindowsの情報を取得できるツールがあったので試してみた。

これと、ZABBIXとうまく連携できれば、(SNMP経由でない)本当のエージェントレスができそう。

インストール方法は以下の通り

ここで、以下のメッセージが出る場合は、
/bin/sh: line 2: ./configure: そのようなファイルやディレクトリはありません
yumで autoconfをインストールして、再度makeします。

makeには結構時間かかります。

make install前に動作確認します。

 

試しに、情報を取得してみます。

Windowsの情報を取得

特定のプロセスの情報を取得(EpgTimerSrv.exe)

特定のプロセスの情報を取得(値の行のみ)

動作確認したら、インストールします。

RPMもあるっぽい(けど、まだ試していません)
http://www.harumaki.net/2012/05/09/centos%E3%81%ABwmi%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%82%8B/

ちなみに、ファイルの情報を取得する場合は以下の様にします。

なぜか、\ -> \\\に変換しないと、エラーになります(\\ではダメ)。
それと、ファイルパスに2バイト文字を含むような場合も失敗しますが、こちらはまだ未解決。
フォルダ単位で各ファイル全部をWMIで取得して後からGrepで文字列抽出するのならいけましたが、とりあえずこれで。

 

なお、接続先がWindows Vista,2008以降だとセキュリティーがきびしくなっているので、
UACを無効にするか、ローカルのAdministratorもしくは、管理者権限を持ったドメインユーザで接続する必要があるようです。

UACはGUIで設定するか、レジストリを変更して再起動します。

UACを無効にできるのであれば一番早いですが、そのままだと管理者権限を持ったローカルユーザで接続しても接続を拒否られる場合は、以下のレジストリを作成・変更してみてください。
再起動は不要らしいです。

 

その他接続できない場合は次の点を確認してみてください。
(Administratorsグループのユーザであれば、Firewall以外はデフォルトでは大丈夫なはずですが・・・)

・Firewallの設定

WindowsFireWallが有効の場合は以下の項目を有効にします。
[標準プロファイル]or[ドメインプロファイル]
・[Windowsファイアウォール:リモート管理の例外を許可する](2003)
・[Windowsファイアウォール:着信リモート管理の例外を許可する](2008以降)

・サービスの起動確認
Windows Management Instrumentationサービス(サービス名:WinMgmt)が
起動しているかの確認

・DCOMのアクセス権限(接続元)

dcomcnfg.exeを起動し、
コンポーネントサービス->コンピュータ->マイコンピュータのプロパティーを開き、
・[既定のプロパティ]タブを選択して,[このコンピュータ上で分散COMを有効にする]が
チェックされているか確認する。

 

・DCOMのアクセス権限(接続先)

dcomcnfg.exeを起動し、
コンポーネントサービス->コンピュータ->マイコンピュータのプロパティーを開き、
・[既定のプロパティ]タブを選択して,[このコンピュータ上で分散COMを有効にする]が
チェックされているか確認する。
・[COMセキュリティ]タブを選択して、[制限の編集]から接続ユーザで
アクセス許可されているかを確認する。

 

・WMIの名前空間のセキュリティーの確認

wmimgmt.mscを起動し、WMIコントロールでプロパティーを表示し、
セキュリティタブのRoot->CIMV2のセキュリティーを確認します。
接続ユーザでアクセス許可されていることを確認します。
どうしてもうまくいかない場合でUACのセキュリティ機能が有効の場合は、
ユーザー自身に対して設定するか、
UsersグループとAdministratorsグループ以外のユーザーが属するグループに対して
設定してみてください。

 

 

 

なお、一緒に、winexeというツールもインストールされます。
これは、Linux側のコマンドラインからWindows上でプログラムを実行するものです。
基本的には、以下のコマンド実行できます。

ただ、実行時以下のようにエラーが出ることがあります。

その場合は、対象のWindows側で、以下のコマンドを実行しておけばよいようです。(参考:http://community.zenoss.org/people/chitambira/blog)

ちなみにこれ、バグだそうで、
winexe/service.c ファイルの以下の部分を修正して、
再度make&make installすれば治るようです。

実際やってみたら、ちゃんと自動でWindows側にサービスが登録され、リモート実行できるようになりました。

また、以下のようにメッセージが出た場合は、

いったん、次のコマンドを入れると解決できる場合もあるそうです

なお、上記winexeはバージョン0.80ですが、、最新版(1.00)が出ているんので、必要があればこちらを
http://sourceforge.net/projects/winexe/files/

インストール方法はこちらを参考に

winexe(1.00)のインストール


コメントを残す

メールアドレスが公開されることはありません。