.wmiコマンドの説明2008年10月21日 04時42分51秒

昨日の続きで、.wmiコマンドの説明でもしようかと。

起動

jsi.js環境でWQLを直接実行するための追加ドットコマンドで、jsi.jsのプロンプトから「.wmi」と入力することで起動します。

昨日の記事でも例示していますが、.wmiを起動すると、モードが通常のJSモードからWQLモードに切り替わり、プロンプト表示も変化します。

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

jsi > .wmi

WMI Console for jsi.js
server: localhost, root: root/cimv2

wmi@localhost >

.wmiコマンドには、接続パラメータを指定することもできます。指定したパラメータはWbemScripting.SWbemLocatorオブジェクトのConnectServerメソッドの第一~第四引数にそのままそのまま渡されます。具体的には以下の通り。

  1. strServer
    → ログインするコンピュータの名前を指定します。省略時は「.」、すなわちローカルホストになります。
  2. strNamespace
    → ログインする名前空間を指定します。本来は省略も可能ですが、パラメータ展開の都合で第三パラメータ以降の指定が必要な場合は省略できません。その場合はシステム標準の名前空間「root/cimv2」を指定してください。
  3. strUser
    → strServer, strNamespaceで指定されたコンピュータ・名前空間へログインするためのユーザ名を指定します。省略時は現在のセキュリティコンテキストで使用されているログイン名が使用されます。
  4. strPassword
    → strServer, strNamespaceで指定されたコンピュータ・名前空間へログインするためのパスワードを指定します。省略時は現在のセキュリティコンテキストで使用されているログインパスワードが使用されます。

リモートコンピュータ「myserver」の名前空間「root/cimv2」へアカウント「username:password」で接続するには以下のように指定します。

jsi > .wmi myserver root/cimv2 username password

WMI Console for jsi.js
server: myserver, root: root/cimv2

wmi@myserver >

WQLの実行

WQLモードでは、後述のドットコマンドを除いて、WQL以外のコマンドは実行できません。

入力方法はJSモードと同様セミコロンが出現するまでは入力モードです。末尾にセミコロンを入力することで初めてWQLによる検索を実行します。

wmi@localhost > select name, creationdate from win32_process;
// 検索結果がダンプされる
出力はデフォルトではJSON形式ですが、後述のドットコマンド「.format」でカンマ区切りまたはタブ区切りのテキストへ変更することもできます。

また、標準ではコンソールへのみ出力されますが、後述のドットコマンド「.output」でファイルへの出力も指定できます。

WQLモードを終了する場合はドットコマンド「.quit」を入力します。.quitを実行するとJSモードへ戻ります。

wmi@localhost > .quit

jsi >

ドットコマンド「.format」

ドットコマンド「.format」で出力フォーマットの確認・変更が行えます。

パラメータを指定せずに.formatを実行した場合は現在の出力フォーマットが表示されます。

wmi@localhost > .format
 - json-format

wmi@localhost >
パラメータ指定を行う場合は".format"に続けて演算子"="と有効なフォーマット名を指定します。
wmi@localhost > .format = json
 - json-format

wmi@localhost > .format = csv
 - csv-format

wmi@localhost >

.formatで指定可能なフォーマット名は以下の3種類です。

  1. "json"
    → JSON形式で出力します。ただし、1行分のデータのみが正しいJSON形式で、複数データがヒットした場合でも各データ間はカンマで区切られないので注意してください(表示のみなら特に問題なし)。
  2. "csv"
    → CSV(カンマ区切りテキスト)形式で出力します。先頭行はカラムヘッダ、それ以降の行に結果がカンマ区切りで出力されます。
  3. "tsv"
    → TSV(タブ区切りテキスト)形式で出力します。CSVフォーマット同様、先頭行がカラムヘッダ、それ以降が結果データになります。
また、.format =の後に何も入力せずに確定させると、デフォルトのJSONフォーマットに変更されます。

ドットコマンド「.output」

ドットコマンド「.output」を使用することで、検索結果が出力されるストリームを確認・構成することができます。

現在の出力ストリーム構成を確認するには、パラメータ指定なしで「.out」または「.output」と入力します。

wmi@localhost > .out
 - [0]: (standard output stream)

wmi@localhost >

ストリームの追加

デフォルトの状態では標準出力のみがストリームとして登録された状態です。以下のように、「+=」を使用してファイルストリームを追加することができます。

wmi@localhost > .out += log.txt
 - [0]: (standard output stream)
 - [1]: file stream:[log.txt]

wmi@localhost >
ファイルのパスはjsi.jsのインストールディレクトリからの相対パスまたは絶対パスで指定できます。絶対パス指定する場合は、パスを二重引用符で括らないでください

上記の構成では、標準出力および.jsi.jsのインストールディレクトリ直下のlog.txtに結果が出力されます。

ストリームの削除

追加したストリームを構成から削除するには「-=」に続けてファイル名/パスを入力してください。

wmi@localhost > .out
 - [0]: (standard output stream)
 - [1]: file stream:[log.txt]

wmi@localhost > .out -= log.txt
 - [0]: (standard output stream)

wmi@localhost >

現在のバージョンではまれにストリームが削除できなくなる場合があります。いずれ修正予定ですが、このような状態になったらいったんjsi.jsを終了してください。

まとめ

というように、WQLを実行して結果を表示するだけのコマンドで、検索結果に対してなにか処理できるわけでもないので実用性はあまりありません。

ま、リモート接続ができるので、たとえばCSVフォーマットでリモートコンピュータにインストールされているプリンタを列挙したりとか、多少は役に立つかもしれませんが、WMIのクラスリファレンス見ながら「へぇ、こんなクラスあるのかー。どんな情報取れるんだろ」を試すくらいしか使い道ないかもしれません。

またしても長めの記事になっちゃったので、ライブラリ自体の説明はまた後日。