【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
   
[運用]
Windowsスクリプティング環境比較:PowerShell vs WSH

4.スクリプト機能の比較(2)

Microsoft MVP
Visual Developer - Scripting
牟田口 大介
2007/04/12

比較ポイント「WMIの呼び出しは?」

WSH × WMIの呼び出しが面倒
PowerShell WMIの呼び出しが容易

 WindowsにはWMI(Windows Management Instrumentation)という、ソフトウェアやハードウェアを統一的に管理するための機能が存在する。WSHではWMIのCOMオブジェクトのコレクション(オブジェクトの集合)から構文を使ってそれぞれのオブジェクトを取り出し、必要なプロパティを取り出す、という煩雑な手順を踏むのが基本的な使い方だが、PowerShellにおいてはGet-WMIObjectというコマンドレットを使うことで、わずか数行で記述することができる。ここではシステムに含まれるディスク・ドライブ群の容量を列挙するスクリプトを組んでみよう。

■VBScript
※ファイル:wmidisk.vbs

Option Explicit
'SWbemServicesExオブジェクト、SWbemObjectSetコレクションを格納する変数を宣言
Dim objWbemServices, objWbemObjectSet

'SWbemServicesExオブジェクトを取得して変数に格納
Set objWbemServices = GetObject("winmgmts:\\.")
'SWbemServicesExオブジェクトのInstancesOfメソッドを使い
'Win32_DiskDrive(ディスクドライブの情報を格納したクラス)のコレクション
'(SWbemObjectSetコレクション)を得て変数に代入
Set objWbemObjectSet = objWbemServices.InstancesOf("Win32_DiskDrive")

'SWbemObjectExオブジェクトを格納する変数を宣言
Dim objWbemObject

'SWbemObjectSetコレクションの構成要素である、おのおののSWbemObjectExオブジェクトを取り出す
For Each objWbemObject In objWbemObjectSet
    'SWbemObjectExオブジェクトのSizeプロパティの値を参照し、表示
    WScript.Echo "ディスクのサイズ(bytes): " & objWbemObject.Size
Next

'オブジェクトの解放
Set objWbemServices = Nothing
Set objWbemObjectSet = Nothing

VBScriptによる実行例

■JScript
※ファイル:wmidisk.js

//SWbemServicesExオブジェクトを取得して変数に格納
var objWbemServices = GetObject("winmgmts:\\\\.");
//SWbemServicesExオブジェクトのInstancesOfメソッドを使い
//Win32_DiskDrive(ディスクドライブの情報を格納したクラス)のコレクション
//(SWbemObjectSetコレクション)を得て変数に代入
var objWbemObjectSet = objWbemServices.InstancesOf("Win32_DiskDrive");

//SWbemObjectSetコレクションの構成要素である、おのおののSWbemObjectExオブジェクトを取り出す
for(e = new Enumerator(objWbemObjectSet) ; !e.atEnd() ; e.moveNext())
{
    objWbemObject = e.item();
    //SWbemObjectExオブジェクトのSizeプロパティの値を参照し、表示
    WScript.Echo("ディスクのサイズ(bytes): " + objWbemObject.Size);
}

JScriptによる実行例

■PowerShell
※ファイル:wmidisk.ps1

# Get-WMIObjectコマンドレットを用い、Win32_DiskDriveクラスのインスタンスを変数に格納
$disks = Get-WMIObject -class Win32_DiskDrive
# パイプを通じ、コレクションの各要素を列挙する
$disks | ForEach-Object -process {Write-Host("ディスクのサイズ(bytes): " + $_.Size)}

PowerShellによる実行例

 WSHのVBScriptやJScriptのコードに比べると、PowerShellのコードがシンプルで簡潔なことがお分かりいただけると思う。

 このほかにもWSHではCOMオブジェクトを呼び出さないとファイルシステムやレジストリにアクセスできないが、PowerShellではそれぞれファイルシステム・プロバイダ、レジストリ・プロバイダが提供するコマンドレットを組み合わせることで容易にアクセスが可能だ。

WSHとPowerShell、どちらを使うべきか?

 ここまでの比較を振り返ってみると、現状ではアプリケーションの使い勝手としてはWSHが、スクリプト言語の機能面ではPowerShellが優位になると考えて差し支えないだろう。使い分けの決め手となるのは、システムにPowerShellなどを追加インストールできるか否かにかかっているといえるかもしれない。WSHならばどこででも動作するが、PowerShellはそうではないからだ。

 将来性に関していうと、WSHは今後セキュリティ対策やバグフィックスなどのためのマイナー・アップグレードのみにとどまり、メインとなる機能はさほど変化しないと考えられる。ある意味「枯れた」「安定した」環境である。あくまで予想だが、WSHはWSHで今後も長く使われるのではないかと思う(コマンド・プロンプト上で動作するバッチ・ファイルすらいまだ現役のところもあるくらいなのだから)。一方、PowerShellはまだリリースされたばかりで、今後さまざまな発展が予想される。また、さまざまな製品に、カスタマイズされたPSスナップイン(PowerShellを拡張するためのファイル。PSプロバイダやコマンドレットを含む)が同梱される予定である(Exchange Server 2007など)。

 また応用面に関していうと、WSHを学習することでVBScriptなら文法が似ているプログラミング開発言語であるVB.NETやマクロ言語であるOffice VBAなどへの移行もスムーズに行えるであろう。JScriptは最近のWebページで流行しているAJAXの構成言語であるJavaScriptと互換性があるので、こちらも覚えたことは無駄にならないだろう。また、VistaではWindows サイド・バーにガジェットと呼ばれる小さなプログラムを配置できるが、その記述言語はVBScript、JScript(JavaScript)である。すなわちWSHを覚えることで、最新技術に対してもさまざまな応用が利くといえる。その点に関してはPowerShellも同様で、PowerShellを学習すると、.NET系言語(VB.NET、C#など)が使用する.NET Frameworkに精通することができるという利点がある。

 これらを踏まえると、これからWindowsで動作するスクリプト言語を学ぼうとする方には、WSHとPowerShell、どちらを選んでもそれぞれメリットがあるので、筆者としては「こちらがお薦め!」とはいいにくいところがある。本音をいえば「両方お薦め!」である。ぜひとも、どちらの環境にも触れてみていただきたい。また、WSHをすでに使われている方は、ぜひ新しいPowerShellも使ってみていただきたいと思う。End of Article

 

 INDEX
  [運用]Windowsスクリプティング環境比較:PowerShell vs WSH
    1.PowerShellのインストールと動作確認
    2.アプリケーションとしての比較
    3.スクリプト機能の比較(1)
  4.スクリプト機能の比較(2)
 
 運用

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています