system.runでWindowsの情報取得した際の文字化け対応方法について
一例ですが、Windowsの「net accouts」の結果をZabbixで取得する為に以下の実装をしております。
system.run["net accounts > C:\zabbix\log\net_accounts.log",nowait]
vfs.file.contents["C:\zabbix\log\net_accounts.log",ISO-2022-JP]
vfs.file.time["C:\zabbix\log\net_accounts.log"]
単純に
system.run["net accounts"]
の実行結果を取得すると、Windows:SJIS、Zabbix:UTF8の文字コード違いで文字化けが発生してしまいます。
もっとスマートに文字化け対策をする方法があれば情報提供頂けないでしょうか。
heya - 投稿数: 319
ISO-2022-JP ではなく SHIFT_JIS か CP932 にすればいいんじゃないでしょうか。
※追記
よく見ると質問を取り違えていたようです。上のやり方だとできている、ということなんですね。
TNK - 投稿数: 4769
Windowsのcmd.exeが入出力を勝手に書き換えてしまうので、直接的
にパイプで値を渡して文字コード変換を行っても、正常にUTF-8で
文字列を受け取ることができません。
結局、現在実装されているようにファイルを介して値を取得するの
が単純で確実な方法になると思います。
ikemo - 投稿数: 48
そうですかー。きっとみなさんお困りなんですね。
ありがとうございました。
tpse - 投稿数: 1
日本語で取得するから文字化けすると思われ、乱暴ですが
system.run[chcp 437 & net accounts]
とすれば良いのではないでしょうか。
さらに | (パイプ) と find(str) コマンドなどを使って必要な行だけにすれば
トリガー設定もしやすいかも知れません。
TNK - 投稿数: 4769
残念ながらできません。
英語のコードページを指定すればASCIIだから大丈夫だと思われた
のかもしれませんが、上にも書いた通り、Windowsのcmd.exeが入出
力を勝手に書き換えてしまうせいか、文字化けした値が取得されま
す。
ikemo - 投稿数: 48
CHCPで変換すればWindowsServer2012R2では問題なくなりますが、Windows7だと文字化けしてしまいますね。