Open棟梁Project - マイクロソフト系技術情報 Wiki

* 目次 [#l9568f70]
#contents

* 概要 [#m4ffc982]
スクリプティング・ディレクトリでは、
-[[BAT]](.batファイル)
-[[VBScript>VBS]](.vbsファイル)
-[[PowerShell]](.ps1ファイル)
-その他、関連ツール

のトピック情報を纏めています。

*特徴と使い分け [#r94c7a57]

| |bat|vbs|PowerShell|
|特徴|環境変数やパスの扱いが簡単。&br;外部コマンドの飛び出しが簡単。|VBやExcelのVBAに類似した言語。&br;COMの呼び出しが簡単。|.NETとの親和性。&br;C#でcmdlet開発も可能。&br;'''System.Windows.Forms''' にあるクラスを利用してGUIを作成することも可能。|
|向き|少数のコマンドを連続実行。|COMを多用した処理。&br;テキストファイルの処理。|パイプラインを利用した高度なオブジェクト処理。|
|不向き|エラー処理が複雑。&br;引数が多い(10個を超える)。|バイナリファイルの処理。&br;暗号/認証情報などのテキスト以外の取り扱い。&br;Declare文がない, Dim に As 型 がない。|WMIやCOM(.NETでないオブジェクト)を多用する場合。&br;バージョンが過渡期、旧OSにはPowerShell本体のインストールが必要。|
|使いどころ|少数のコマンドを連続処理。&br;vbsやPowerShellを呼び出すドライバとして。|旧環境との互換性や共通性を望む場合。|呼び出すコマンドがPowerShellのcmdlet。&br;新規OS環境。|
|特殊文字の注意|データに「%」文字が多数含まれる場合に注意、変数として解釈されることがある。&br;データに「"」が含まれる場合、文字列の区切りが壊れ、if文やfor文で予定外のエラーになるので注意。||データに「$」が含まれる場合、変数として解釈されることがあるので注意。&br;「,」を書くと配列になり、引数で「+」を使用すると文字連結にならない。&br;「'」と「"」は意味が異なる。|
|エラーの扱い|'''%ERRORLEVEL%''' で都度判定。|'''on error resume next''' と '''Err.Clear''' して '''Err.Number''' で追って判定。|既定は、エラーメッセージを赤文字で表示して、続行。&br;エラー処理する場合、各コマンドに 都度 -EA を指定するか、try/catch と '''$ErrorActionPreference = "stop"''' 。|

*移行のヒント [#nf04f6dc]
vb/vbaとvbsの違い, vbsからPowerShellへ移行のヒント

-[[VBA の機能で VBScript に含まれていない機能:http://msdn.microsoft.com/ja-jp/library/cc392401.aspx]]
-[[VBScript の機能で VBA に含まれていない機能:http://msdn.microsoft.com/ja-jp/library/cc392354.aspx]]
-[[VBScript のスクリプトを Windows PowerShell のスクリプトに変換する方法はありますか:http://gallery.technet.microsoft.com/scriptcenter/3002aff2-d444-4f6f-b0b7-2ca77f95e9ca]]

*COMとは [#uaee4795]
COM(Component Object Model) は、Microsoft が作り出した、プログラムや部品の呼び出しを共通的に行える仕組みです。~
COMをベースに、 コントロール、ActiveX などの部品も作られてきました。

COMを利用する際は、ProgID を使用して、COM部品のオブジェクトを得ます。
-[[COM]]

-vbsの例 (作成する場合)~
  set fso = CreateObject("Scripting.FileSystemObject")
-vbsの例 (作成済みのオブジェクトを取得する場合)~
  set word = GetObject("c:\temp\word.doc", "Word.Document")

Scripting.FileSystemObject や "Word.Document" は ProgID の例です。~
ProgID は、 レジストリの HKEY_CLASSES_ROOT に書かれています。

HKEY_CLASSES_ROOT には、大きく分けて、 拡張子、ProgID, GUID の3種類の情報があります。

レジストリで、ProgID をたどると、サブキーに GUID がある場合があります。~
その場合は、 さらにその GUID キーをたどると、 COM部品の情報があります。

COM部品の実体は、レジストリの GUID の下、 InprocServer32 の値を確認すると、
どのdllファイルが提供しているか分かります。~
COM部品の実体が、InprocServer32 ではなく LocalServer32 の値に書かれている場合もあります。

InprocServer32 は、COM部品を呼び出したプロセスと同じプロセスの中で動作するCOM部品。~
LocalServer32 は、COM部品を呼び出したのとは別のプロセス内で動作し、呼び出し元とはプロセス間通信して動作するCOM部品。~
どちらも、COMですが、使用方法としては同じです。~
(デバッグやトラブルシュートでは、この違いは重要になってきますが)~

COMに関しては、下のページも参考ください。~
[[Component Object Model - wikipedia:http://ja.wikipedia.org/wiki/Component_Object_Model]]

*WMIとは [#a49755cc]
-[[WMI]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS