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