WindowsでWMIとwmicコマンドを使ってシステムを管理する(基本編)Tech TIPS

WMIを利用すると、システムに関するさまざまな情報を取得したり、操作したりできる。 ローカルだけでなく、リモートのコンピュータもWMIで制御できる。WMIをコマンド・プロンプトから利用するにはwmicコマンドを利用する。wmicには手動で利用すためのインタラクティブ・モードと、バッチなどで利用するためのコマンドライン・モードがある。

» 2015年07月10日 00時00分 公開
[打越浩幸デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象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はインタラクティブ・モードでも非インタラクティブ・モード(コマンドライン・パラメータを使ったモード。バッチ・ファイルなどで利用する場合に便利)でも利用できるが、まずはインタラクティブ・モードでの使い方からみてみよう。

 コマンド・プロンプトを開き、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で紹介する。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。