WMIを利用すると、システムに関するさまざまな情報を取得したり、操作したりできる。 ローカルだけでなく、リモートのコンピュータもWMIで制御できる。WMIをコマンド・プロンプトから利用するにはwmicコマンドを利用する。wmicには手動で利用すためのインタラクティブ・モードと、バッチなどで利用するためのコマンドライン・モードがある。
対象OS:Windows 2000/Windows XP/Windows Server 2003/Windows Vista
WMI(Windows Management Instrumentation)は、Windows OSにおけるシステム管理のための共通基盤アーキテクチャであり、システムに関するさまざまなインベントリ情報(ハードウェアやソフトウェアの情報といったシステム情報のほか、プロセスやサービス、ユーザーやグループといった動的な情報まで)を、取得・管理する機能を提供している(WMIは、システム管理のためのオープンな標準規約WBEM:Web-Based Enterprise ManagementをWindows OS向けに実装したもの)。Windows 2000以降のOSではこのWMIが標準で実装されているので(Windows 9x向けWMIコンポーネントはダウンロード・センターで提供)、WMIを使えば、企業内に存在するさまざまなコンピュータ・システムをリモートから効率よく管理することができる。
WMIはエンタープライズ・レベルの大規模なシステム管理ツールで利用されることが多いが、小規模なシステムの日常の管理業務でも利用可能だし、スクリプトやプログラムなどからWMIを呼び出して、システムの状態を把握するといった使い方もできる。
WMIを操作するためのコマンドとして、Windows XP以降のWindows OSには、wmic.exe(Windows Management Instrumentation Command Line)というコマンドライン・ツールが用意されている(Windows 2000にはwmic.exeは用意されていないが、WMIで管理することは可能)。これを使えば、専用のシステム管理ツールを使わずとも、WMIによって提供されている情報を取得したり、操作できる。本TIPSでは、wmicの基本的な使い方について解説する。
wmicはインタラクティブ・モードでも非インタラクティブ・モード(コマンドライン・パラメータを使ったモード。バッチ・ファイルなどで利用する場合に便利)でも利用できるが、まずはインタラクティブ・モードでの使い方からみてみよう。
コマンド・プロンプトを開き、wmic.exeコマンドを引数なしで起動すると、インタラクティブ・モードで起動する。このモードでは、プロンプト文字列(デフォルトでは「wmic:root\cli>」。これは現在の「名前空間」を表している)に続いてコマンドやそのオプションなどを指定する。コマンド名などが分からなければ、「/?」と入力すると詳しい説明が表示されるし、オプション部分の書式が不明なら、その部分にやはり「/?」と指定すればよい(例:「process /?」などとする)。なお「/?」は実は「/?:brief」の略であり、短形式のヘルプを表示するが、「/?:full」とすると長形式のより詳しいヘルプが(あれば)表示される。とりあえず、迷ったら「/?」、より詳しくは「/?:full」、終了するにはexitかquitと憶えておこう。また「ヘルプとサポート」の「wmi」や「wmic」などの項目もよく読んでおいていただきたい。
C:\>wmic ……wmicの起動
wmic:root\cli> ……空入力だと次のようなメッセージが表示される
ヘルプを表示するには "/?"、終了するには QUIT と入力してください。
wmic:root\cli>/? ……ヘルプの表示(短形式。「/?:brief」と同義)
[グローバル スイッチ] <command>
次のグローバル スイッチが利用可能です:
/NAMESPACE エイリアスが操作する名前空間のパスです。
/ROLE エイリアスの定義を含む役割のパスです。
/NODE エイリアスが操作するサーバーです。
/IMPLEVEL クライアントの偽造レベルです。
/AUTHLEVEL クライアントの認証レベルです。
/LOCALE クライアントが使用する必要がる言語 ID です。
……(一部省略)……
/USER セッションの間使用するユーザーです。
/PASSWORD セッション ログオンに使用されるパスワードです。
/OUTPUT 出力リダイレクトのモードを指定します。
/APPEND 出力リダイレクトを指定します。
/AGGREGATE 集合体モードを設定またはリセットします。
/AUTHORITY Specifies the <authority type> for the connection.
/?[:<BRIEF|FULL>] 使用法の情報です。
特定のグローバル スイッチの詳細については、 switch-name /? と入力してください。
次のエイリアスが現在の役割で利用可能です:
ALIAS - ローカル システムのエイリアス ボリュームにアクセスします。
BASEBOARD - ベース ボード (マザーボードまたはシステム ボード) の管理です。
BIOS - 基本入出力 (BIOS) 管理です。
……(以下省略)……
wmic:root\cli>/?:full ……ヘルプの表示(長形式のヘルプ)
[グローバル スイッチ] <command>
次のグローバル スイッチが利用可能です:
NAMESPACE - エイリアスが操作する名前空間のパスです。名前空間
は常に相対です。たとえば、名前空間が '\\' で始まらない
場合、現在の名前空間に関連すると仮定されます。
使用法:
/NAMESPACE:<namespace>
ROLE - ユーティリティ セッションに利用可能にするためのエイリアスの定義を含む
役割へのパスです。
使用法:
……(以下省略)……
利用可能なコマンド(「エイリアス」という。実際には「Win32_ComputerSystem」といったクラス名の別名なのでエイリアスと呼ばれている)は、実装されているWMIのプロバイダ(WMI情報を提供するコンポーネントのこと)の数やインストールされているOSコンポーネントに応じてさまざまに変わる。より新しいOSの方が多くのコマンドが用意されているので、実際に操作して確認していただきたい。
まずはコンピュータ・システムの情報を取得する「computersystem」というコマンドを実行してみよう。
wmic:root\cli>computersystem ……コマンドを入力
AdminPasswordStatus AutomaticResetBootOption AutomaticResetCapability BootOptionOnLimit ……(行末まで省略)……
3 TRUE TRUE ……(行末まで省略)……
非常に長い行結果が得られているが、これは結果を1行に表示しようとしているからである(見出し行とその値の行がペアになっている)。管理ツールが取得する場合はこれでもよいのだが、これでは人間は視認しづらい。そこで行末に「list <フォーマット指定>」を追加して、見やすく加工してみよう。
wmic:root\cli>computersystem /? ……オプションを表示させる
COMPUTERSYSTEM - コンピュータ システム管理です。
ヒント: エイリアスの使用法の BNF です。
(<alias> [WMIObject] | <alias> [<path where>] | [<alias>] <path where>) [<verb clause>].
使用法:
COMPUTERSYSTEM ASSOC [<format specifier>]
COMPUTERSYSTEM CALL <method name> [<actual param list>]
COMPUTERSYSTEM CREATE <assign list>
COMPUTERSYSTEM DELETE
COMPUTERSYSTEM GET [<property list>] [<get switches>]
COMPUTERSYSTEM LIST [<list format>] [<list switches>] ……これを使ってみる
COMPUTERSYSTEM SET [<assign list>]
wmic:root\cli>computersystem list /? ……listの詳しい使い方を表示させる
プロパティ一覧の操作です。
使用法:
LIST [<list format>] [<list switches>]
次の LIST 形式が利用可能です:
BRIEF - Domain, Manufacturer, …(以下省略)…
FULL - AdminPasswordStatus, …(以下省略)…
INSTANCE - Name
POWER - Name, …(以下省略)…
STATUS - AdminPasswordStatus, …(以下省略)…
SYSTEM - __CLASS, __DERIVATION, …(以下省略)…
WRITEABLE - AutomaticResetBootOption, …(以下省略)…
次の LIST スイッチが利用可能です:
/TRANSLATE:<table name> - <table name> からの値を通して出力を変換します。
/EVERY:<interval> [/REPEAT:<repeat count>] - 値を (X 間隔) 秒ごとに返します。/REPEAT を指定すると、コマンドが <repeat count> 回実行されます。
/FORMAT:<format specifier> - XML 結果を処理するキーワードと XSL のファイル名、またはそのいずれかです。
…(以下省略)…
また複雑なヘルプが表示されているが、よく見ると「list brief」「list full」「list instance」「list power」「list status」「list system」「list writeable」の7通りの指定方法があることが分かる。それぞれ、指定するオプションに応じて、表示される項目が変わるだけである。
wmic:root\cli>computersystem list brief …briefタイプでの表示
Domain Manufacturer Model Name …(以下省略)…
d-advantage.com MICRO-STAR INC. MS-6580 UUPC11 user001 …(以下省略)…
wmic:root\cli>computersystem list instance …instanceタイプでの表示
Name
UUPC11
wmic:root\cli>computersystem list full …full(最長)タイプでの表示
AdminPasswordStatus=3
AutomaticResetBootOption=TRUE
AutomaticResetCapability=TRUE
BootOptionOnLimit=
BootOptionOnWatchDog=
BootROMSupported=TRUE
BootupState=Normal boot
Caption=UUPC11
ChassisBootupState=2
CreationClassName=Win32_ComputerSystem
CurrentTimeZone=540
…(以下省略)…
ほかにもいろいろなコマンドがあるので、試していただきたい。
特定の項目だけを表示したければ、「computersystem get <項目名>」のようにすればよい。
wmic:root\cli>computersystem get domain,name,primaryownername
Domain Name PrimaryOwnerName …3項目だけ表示させる
d-advantage.com UUPC11 user001
次はプロセスに関する情報を表示させてみよう。
wmic:root\cli>process get name,workingsetsize …プロセス名とメモリ・サイズの表示
Name WorkingSetSize
System Idle Process 16384
System 249856
smss.exe 434176
csrss.exe 14077952
winlogon.exe 7479296
services.exe 20398080
lsass.exe 1511424
svchost.exe 6000640
svchost.exe 5890048
svchost.exe 39911424
svchost.exe 4132864
svchost.exe 3682304
spoolsv.exe 7897088
bgsvc.exe 1683456
…(以下省略)…
プロセスの一覧が表示されたが、この中から、メモリ・サイズが20Mbytes以上のものだけを列挙してみよう。そのためには、「where (<式>)」パラメータを追加する。
wmic:root\cli>process where (workingsetsize > 20000000) get name,workingsetsize
Name WorkingSetSize
services.exe 20398080 …サイズが20Mbytes以上のプロセス
svchost.exe 39878656
nod32krn.exe 27176960
explorer.exe 30900224
msimn.exe 24788992
iexplore.exe 108703744
hh.exe 20291584
helpctr.exe 33071104
wmic.exe 26951680
以上はwmicをインタラクティブ・モードで使用する例であったが、バッチ・ファイルなどから利用する場合は、非インタラクティブ・モードで利用できると便利だろう。そのためには、wmicに続けて、先ほどのコマンド名をそのままパラメータとして与えればよい。ただし括弧記号や不等号記号などはコマンド・プロンプトに解釈されないように、ダブルクオート記号で囲む必要がある。
C:\>wmic process where "(workingsetsize > 20000000)" get name,workingsetsize
Name WorkingSetSize …サイズが20Mbytes以上のプロセスの一覧
services.exe 20398080
svchost.exe 39546880
nod32krn.exe 27176960
explorer.exe 30908416
msimn.exe 24788992
iexplore.exe 108703744
hh.exe 20291584
helpctr.exe 33071104
ここまでは、ローカルのコンピュータ上のWMIオブジェクトを表示させていたが、リモートのコンピュータを指定して実行することももちろん可能である(ただしリモートから管理できるように、ファイアウォールなどが設定されている必要がある)。
リモートのコンピュータを指定するには、最初に「/node:"<コンピュータ名>"」を指定すればよい(複数ある場合は「/node:"computer1","computer2"」のようにする。コンピュータ名が英数字だけならダブルクオート記号は不要だが、ドメイン名のピリオドなどを含む場合は囲んでおく必要がある)。インタラティブ・モードの場合でも同様であるが、インタラクティブ・モードで単に「/node」だけを指定すると、以後の操作は指定されたサーバになる(現在接続しているサーバや名前空間などの情報はcontextコマンドで確認できる)。
C:\>wmic /node:"server1" process where "(workingsetsize > 10000000)" get name,workingsetsize …server1における、サイズが10Mbytes以上のプロセスの一覧
Name WorkingSetSize
WINLOGON.EXE 11776000
SERVICES.EXE 16519168
sqlservr.exe 394969088
nod32krn.exe 23371776
omaws32.exe 16826368
svchost.exe 14438400
以上のほかにもWMI/WMICにはさまざまな使い方があるが、それについては今後、別のTIPSで紹介する。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.