2010年1月30日土曜日

PowerShellからWMIを使う

PowerShellの登場により、
WMIの活用への敷居が一気に低くなったように思います。

technetによれば、WMI(Windows Management Instrumentation) とは:

WMIとは、WBEM(Web-Based Enterprise Management Initiative) を Microsoft が実装したものです。WBEM とは、エンタープライズのネットワークの管理情報にアクセスしたり、管理情報を共有したりするための標準を確立する業界イニシアティブの 1 つです。WMI は、管理環境にあるオブジェクトを説明するデータ モデルであるCommon Information Model (CIM) を統合的にサポートします。

要は、Windowsの各種管理に使用できる手段のひとつ、ってことです。
私も、PowerShellを書き始めるまでWMIは名前こそ知っていましたが、
何ができるのかとか、どういう風に使えばいいのかとか、
ほとんどまったく知らなかったってのが実際のところです。

しかしながら、PowerShellのテクノロジーを使用できる今、
Get-WmiObjectに-Listオプションをつけて実行することにより、
やりたいことを実現させてくれるWMIクラスを探すのも容易であり、
Get-Memberコマンドレットを使ってメンバーも簡単に確認にできます。
もちろん、WSHでもWMIを使用することができたのですが、
言語として検索機能をサポートしている点において、
PowerShellは非常に優れている、といって間違いないかと思います。
これは、PowerShellの登場によりWMIが一気に身近なものになった、
ということに他ならないのではないでしょうか。

なお、クラスを自分で探すのが面倒な場合とか、
デフォルトの名前空間以外のWMIクラスを使用する場合については、
Windows PowerShell Scriptomaticにより、
PowerShellのコードを自動生成し、それを必要に応じて加工したものが使えます。
どんなメソッドが使えるかは、Get-Memberで確認しましょう。

ということで、PowerShellを用いてシステムの運用管理を考える場合には、
PowerShellからWMIを積極的に使っていくことを検討してみてはどうでしょうか。

実装例:
PowerShellからWMIを使用し、残り容量が10%を切ったディスクのドライブレターを取得する。

#ディスク関連のWMIクラスを探す
PS D:\> Get-WmiObject -List -Class "*Disk*"
(出力内容は省略)

#ディスク容量が残り10%を切ったディスクのドライブレターを表示
PS D:\> Get-Wmiobject -class Win32_LogicalDisk | ?{ $_.Size -ne $null } | ?{ $_.FreeSpace / $_.Size -lt 0.1} | %{ $_.DeviceID }
(出力内容は省略)


参考サイト:
WMIクエリでのLIKE演算子の使用

参考コマンド:

Get-Help about_WMI_cmdlets


便利なツール:
Windows PowerShell Scriptomatic

修正履歴:

2 件のコメント:

匿名 さんのコメント...

ありがとうございます。
コメント大変参考になりました。
このような情報を残していただけると大変助かります。

匿名 さんのコメント...

ありがとうございます。
コメント大変参考になりました。
このような情報を残していただけると大変助かります。