【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  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-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

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

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

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

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?