前回はPowerShellでC#を使用したので、今回はVB.NETを使用する方法について説明します。
PowerShellでVB.NETのソースコードを展開する場合もAdd-Typeコマンドレットを使用します。
Add-Type コマンドレットには -Languageパラメータという言語を指定するパラメータがあるのですが、"VisualBasic"と指定するとVB.NETを使用できるようになります。
既定値はC#となっているので、前回は指定しなかったというわけです。
使用可能な言語とパラメータに指定する値は下記の通りです(*)。
言語 | パラメータ値 |
C# | CSharp |
CSharpVersion3 | |
VB.NET | VisualBasic |
JScript | JScript |
* C#がなぜ2通りあるのかわかりません。どのように差が出るのか… わかる方いましたら情報いただけると助かります。
Add-Typeコマンドレットの書式は下記の通りとなります。
Add-Type -Language 使用する言語 展開するソースコード
以下は、乱数を作成するメソッドをVB.NETで作成し、PowerShellで使用できるようにします。
$source = @"
Public Class MyFunction
Public Shared Function GetRandom( _
ByVal MinValue As Integer, _
ByVal MaxValue As Integer) As Integer
Dim r As New System.Random()
Return r.Next(MinValue, MaxValue)
End Function
Public Function GetRandom2() As Integer
Dim r As New System.Random()
Return r.Next(0, 10)
End Function
End Class
"@
Add-Type -Language VisualBasic $source
C#のときと同様に Sharedなメソッドは
[クラス名]::メソッド
で使用できます。
今回作成したクラスMyFunctionにあるメソッド GetRandomは
PS> [MyFunction]::GetRandom(-5, 5)
のようにして使用します。この場合は-5~5までの間の乱数を返します。
インスタンスを作成する場合も前回と同様で
変数 = New-Object クラス名
とします。
今回のクラスの場合は
PS> $MyFunc = New-Object MyFunction
としてインスタンスを作成し
PS> $MyFunc.GetRandom2()
として使用します。
コメント
おそらく、.NET Framework 3.5.1(C#3.0)がインストールされている環境と、.NET Framework 2.0しかインストールされていない環境の二通りを想定しているのだと思います。
Windows Server 2008 R2では.NET 3.5.1がデフォルトでオフにされているのでそれの関係もあるかと。
むたぐちさん
コメントありがとうございます。
>おそらく、.NET Framework 3.5.1(C#3.0)がインストールされている環境と、.NET Framework 2.0しかインストールされていない環境の二通りを想定しているのだと思います。
なるほどですね。
しかし、なぜC#だけなんでしょうね?
VBは.NET Frameworkのバージョンは気にしなくて良いと言うことなんでしょうかね…