Windows TIPS
[PowerShell]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

PowerShellでVisual Basicの組み込み関数を利用する

解説をスキップして操作方法を読む

山田 祥寛
2008/02/22
対象ソフトウェア
Windows PowerShell
Visual Basic(VBScript)には、直感的に理解しやすい、さまざまな関数群が取りそろえられている。
Microsoft.VisualBasicアセンブリを有効にすることで、これらVisual Basicの組み込み関数をPowerShellからも利用できるようになる。

解説

 Visual Basicが初学者にも親しみやすい理由の1つとして、直感的にも分かりやすいさまざまな関数群が豊富に取りそろえられているという点が挙げられる。もちろん、PowerShellや(PowerShellから利用できる).NET Frameworkの基本クラス・ライブラリにも同様、または類似した機能は用意されているが、使い慣れたVisual Basic(あるいはそのサブセットであるVBScript)の関数を引き続き利用したいという方も少なくないはずだ。

 そこで本稿では、PowerShellスクリプトからVisual Basic組み込みの関数を利用する方法について紹介する。.NET Frameworkにおいて、Visual Basicの関数はMicrosoft.VisualBasic名前空間で実装されたクラス・ライブラリの一部として提供されている。つまり、Microsoft.Visual Basic名前空間さえ有効にしてしまえば、実はPowerShellスクリプトをはじめ、.NET Frameworkに対応したほかの言語からも自由に利用できてしまうのである。

 以下のサンプルでは、Visual Basicの組み込み関数を利用する一例として、入力ボックスを表示するInputBox関数を実行してみよう。

操作方法

 注意
PowerShellを利用するには、あらかじめシステムにユーザー自身がインストールしておく必要があります。具体的なインストール方法については別稿の「PowerShellをインストールする」を参照してください。

手順1――テキスト・エディタでPowerShellのコードを入力する

 まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してほしい。なお「#〜」で始まる行は、コードの意味を解説するためのコメント部分なので、省略してもよい。コメントには、スクリプトの簡単な説明を入れておいた。

※ファイル:Vb.ps1

# Microsoft.VisualBasicアセンブリを有効化
[void][System.Reflection.Assembly]::Load("Microsoft.VisualBasic, Version=8.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

# 入力ボックスを表示(入力値は変数$inputにセット)
$input = [Microsoft.VisualBasic.Interaction]::InputBox("メッセージを入力してください。", "Visual Basic関数")
# 入力値の文字列長が0以上である(空でない)場合に、結果を表示
if($input.Length -gt 0){
  "入力された値:" + $input
}
サンプル・ファイルVb.ps1をダウンロードするには、ここをクリックしてください。

 PowerShellスクリプトの実行ファイルは拡張子を「.ps1」とする必要がある。ファイル名はなんでも構わないが、ここでは「Vb.ps1」という名前で保存しておこう。

 コード全体の流れについてはリスト内のコメントをご覧いただくとして、ここではVisual Basicの組み込み関数を有効にしている部分(リスト内の太字)に注目してみよう。

 解説でも述べたように、Visual Basicの組み込み関数はMicrosoft.VisualBasic名前空間で静的なメソッドとして定義されている。ただし、Microsoft.VisualBasic名前空間を含むMicrosoft.VisualBasicアセンブリを、PowerShellはデフォルトでは有効化しない。そこで、最初にMicrosoft.VisualBasicアセンブリを有効化するという手続きが必要になるわけだ。

 アセンブリを有効にするのは、Assemblyクラス(System.Reflection名前空間)に属する静的メソッドLoadの役割だ。Loadメソッドの引数には、アセンブリの完全修飾名を指定する必要がある。完全修飾名の形式は、以下のとおりである。

アセンブリ名, Version=バージョン, Culture=カルチャ, PublicKeyToken=公開キー・トークン

 アセンブリのバージョンやカルチャ、公開キー・トークンについては、エクスプローラから「<Windowsフォルダ>\assembly」フォルダを開いて、該当アセンブリのプロパティ・シートを参照すると確認できる。ほかのアセンブリを有効にしたい場合にも、適宜、必要なアセンブリのプロパティ・シートを確認いただきたい。

アセンブリ・ファイルのプロパティ・シート
Microsoft.VisualBasicアセンブリ・ファイルのプロパティ・シートの例

 Loadメソッドは通常、Assemblyオブジェクトを戻り値として返すが、これをそのままにしておくと、デフォルトで以下のように戻り値(Assemblyオブジェクトの内容)をシェル上に表示してしまう。

Loadメソッドの戻り値をそのまま表示した場合

 そこでここでは、キャスト構文「[void]」で、強制的に戻り値を打ち消しているわけだ。メソッドの実行だけを行い、戻り値を必要としない場合には、よく利用する構文なので、ぜひとも覚えておきたいところだ。

 Microsoft.VisualBasicアセンブリを有効にしたら、あとは実際にVisual Basicの組み込み関数を呼び出してみよう。例えば、入力ボックスを呼び出すInputBox関数は、Interactionクラス(Microsoft.VisualBasic名前空間)の静的メソッドとして呼び出すことができる。そのほか、Microsoft.VisualBasic名前空間に含まれる組み込み関数と名前空間の対応については、以下のページを参照してほしい。

手順2――PowerShellのスクリプト・コードを実行する

 Vb.ps1を実行するには、PowerShellのプロンプトを開き、次のようにコマンドを実行すればよい(カレント・フォルダにスクリプトが保存されているものとする*)。

PS > ./Vb.ps1
入力された値:こんにちは、PowerShell!!

*  PowerShellでスクリプト・ファイルを実行する場合には、あらかじめいくつかの設定を行っておく必要がある。詳細については、別稿「Windows PowerShellコマンド&スクリプティング入門(後編)」を参照いただきたい。

 スクリプトを実行すると、入力ボックスが表示されることを、また、入力ボックスから適当な文字列を入力し、[OK]ボタンをクリックすることで、その内容がシェル上に反映されることを確認してほしい。上のような結果が得られればスクリプトは正しく動作している。End of Article

「Windows TIPS」


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

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間