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)のインストール

Windows7で長時間稼働させていると、ファイル共有の動作が不安定になる場合の対策メモ

以下のシステムイベントログが出てしまった時の対策

うちの環境だと、1週間程度を過ぎるとファイル共有が不安定になってきます。
EDCBが全力稼働のせいかもしれんけど。

srv エラー 2017 非ページ プール割り当ての制限に達したため、サーバーはシステムの非ページ プールから割り当てることができませんでした。

レジストリエディタ(regedit)で

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
に移動し、以下を設定する。

但し、項目が存在しない場合があるので、その場合は、DWORD値(32ビット)を作成の上で設定する。

  • Size:3(10進数)にする。
    1:ローカルアプリケーション用にサーバを最適化、2:ローカルとリモートに配分、
    3:ネットワークの処理用に最適化。
  • IRPStackSize:50(10進数)にする。
    デフォルトは、10進数の15。お奨めは10進数の20もしくは50。
    33~38はエラー可能性ありとのこと。I/O 要求パケット (IRP) のスタック ロケーション数。
  • MaxMpxCt:255(10進数)とする。
    10~255まで。サーバーをサポートしている要求の最大数。
  • MaxWorkItems:1024(10進数)とする。
    少なくとも MaxMpxCtの値の4倍にする。デフォルトで64 最大で1,024。

Size,IRPStackSize,MaxMpxCt,MaxWorkItemsの4つを設定

このSize,IRPStackSize,MaxMpxCt,MaxWorkItemsの4つを設定 以上の設定をし、
サーバーを再起動して現在検証中。

 

Windows7でイベントログ監視したときのエラーでアクションが発生するのでその対策メモ

以下のアプリケーション イベントログが出てしまった時の対策

SideBySide エラー 33 “c:\program files\linkshellextension\LSEConfig.exe”
のアクティブ化コンテキストの生成に失敗しました。
従属アセンブリ Microsoft.VC80.MFC,processorArchitecture=”amd64″,
publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32″,
version=”8.0.50727.762″ が見つかりませんでした。
詳細な診断を行うには sxstrace.exe を実行してください。

link shell extension(ジャンクションなどをエクスプローラから簡単に作れるソフト)が「Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x64)」を要求しているらしい。

本来は、Microsoft Visual C++ 2008 Runtimeとかが入っていれば、それが互換性を持っているのだけど、厳密に必要なDLLを要求している模様。

だから、64Bit版のMicrosoft Visual C++ 2005 Runtimeをいれれば大丈夫らしいです。
(32Bit版のMicrosoft Visual C++ 2005 Runtimeとは別です。)

といっても、64Bit版が入っていなくてもlink shell extension自身は動作するので、
エラーイベントログを出さないためだけの設定かもしれない。

 

ZabbixAgent2.2.1のWindows7(x64)へのインストール

インストーラ付のZabbixAgent2.2.1を見つけたのでメモ

x32,x64両方が用意されています。

ZABBIX AGENT installer
http://www.suiviperf.com/zabbix/index.php

Windows7(x64)にインストールには、
「zabbix_agent-2.2.1_x64.msi」を使います。

ただ、うちの場合Zabbixサーバへの登録名は、マシン名ではなくIPアドレスのため、
そのままではアクティブチェックがうまくいかないので、以下の部分を修正して対応。
(Zabbixサーバアドレス192.168.29.153)
(Agentインストールサーバ192.168.29.81(N54L)の場合)

ちなみに、改行コードがUNIXと同じなので、wordpad.exeで一度開いて、保存し
Windowsタイプの改行コードに変換しておくと、そのあとはメモ帳で正常に開けます。

 

Windows XP、2003での起動時のイベントログエラー対策メモ

Zabbixエージェント入れて、イベントログ監視したら、
警告とかエラーでアクションが発生するのでその対策メモ

EvntAgnt 警告 1015 TraceLevel パラメータがレジストリにありません。 使用した既定のトレース レベルは 32 です。
EvntAgnt 警告 1003 TraceFileName パラメータがレジストリにありません。 使用した既定のトレース ファイルは です。

SNMP サービス起動時に記録されるイベントで、レジストリに特定のものを登録することで回避できるようです。

レジストリ エディタ (Regedt32.exe) を使用して、次のレジストリ値を設定します。

キー名 : HKEY_LOCAL_MACHINE\Software\Microsoft\SNMP_EVENTS\EventLog\Parameters
レジストリ値 : TraceLevel
データ型 : REG_DWORD
設定値 : 32 (10 進数)

キー名 : HKEY_LOCAL_MACHINE\Software\Microsoft\SNMP_EVENTS\EventLog\Parameters
レジストリ値 : TraceFileName
データ型 : REG_SZ
設定値 : NULL (何も設定せず空白にします)

http://support.microsoft.com/kb/821447/ja

 

Zabbix 2.2で、WindowsからZabbix_Senderで日本語文字列を送信してみる

Zabbix 2.2で、 WindowsからZabbix_Senderで日本語文字列(2バイト文字列)を含んだものを送信した場合、残念ながら文字化けします。

ZabbixSeverの内部では、UTF-8で管理されていますが、
Windowsの場合、基本的に文字列はShift-JIS(正確にはWindows-31J,MS932)になるため、
そのまま処理すると、文字化けすることになるようです。

試しに、NKF(Network Kanji Filter)で、SJISからUTF-8(BOM 無し)に変換してあげることで
正しくデータを送信できました。

必要なもの
・Zabbix_Sender.exe
Windows用Zabbix Agentに付属のもの。
zabbix_agent-1.8.15-1.JP_installer.exeでテスト

・nkf.exe nkf32.dll Windows用
http://www.vector.co.jp/soft/dl/win95/util/se295331.html

nkfwin\vc2005\win32(98,Me,NT,2000,XP,Vista,7)Windows-31J\内の
nkf32.exeを利用出来ます。

 

そのまま日本語文字列を送信した場合

すると、ZabbixServerには、以下のように取り込まれます(文字化けします)。

タイムスタンプ
2014/01/13 23:53:22 Windows?????{??

 

今度は文字コードをNKFを使用してSJISからUTF8(BOM無し)に変換して送信した場合

この場合として以下のように正しく取り込まれます。

タイムスタンプ
2014/01/13 23:53:57 Windowsから日本語を送信します

これを使えば、SNMPgetやSNMPTrap受信でも文字化けせずに取得できるかも・・・・・

そのうち試してみます。

 

ただ、SNMP関係の文字化けの問題点って、私の環境だと

  • 特定WindowsEventlogのSNMPTrap変換(EVNTWIN.exe)の受信
  • VMware(vCeneter)からのイベント発生時SNMPTrapメッセージ送信
  • WindowsのSNMPAgentの場所(Device location)や連絡先(Device contact details)に
    日本語文字列をセットされている場合のSNMP取得

の部分がおかしくなるぐらいなので、なんとか回避策が立てられそうです。

 

Zabbix 2.2でWindowsイベントログを取得する為のメモ

Zabbix2.2で、各Windows監視対象のイベントログを取得できるみたいなので、やってみた。

監視対象にAgentインストールして、アクティブチェック機能を有効にした状態で動作させる必要があります。

ちゃんと、日本語文字列も化けないで取り込めるのでうれしい。
SNMP関係やZabbix_Senderは普通に使うと文字化けしてしまうので、対応方法を思案中・・・・・

Zabbix_Senderの文字化け対策のほうは何とか見つけたので、そちらは後日。

以下設定メモ
続きを読む