PowerShellでVisualBasicを利用する
こちらのページを見て、ひょっとしたらPowerShellからVisualBasicのコードをそのまま利用できるのでは、と思いついたのでメモ。
VBCodeProvider クラス (Microsoft.VisualBasic)
簡単なクラスのコード。
Public Class SampleClass Private name as String Public id Function SayHello SayHello = "Hello" End Function End Class
上記をPowerShellで使用するコード。
$provider = New-Object "Microsoft.VisualBasic.VBCodeProvider"; $compilerParameters = New-Object "System.CodeDom.Compiler.CompilerParameters"; $compilerParameters.GenerateInMemory = $true; # VBのコード $sourceCode = @" Public Class SampleClass Private name as String Public id Function SayHello SayHello = "Hello" End Function End Class "@; # コンパイル $result = $provider.CompileAssemblyFromSource($compilerParameters, $sourceCode); # メモリ上にアセンブリを展開したので、おそらくすでにロード済み # そのためすぐ使える $assembly = $result."CompiledAssembly"; # VBのクラスのインスタンスを作成する $obj = New-Object "SampleClass"; $obj.SayHello(); # "Hello"が得られる $obj.id = 100; # メンバ変数にもアクセス可能
Get-Memberの結果はこちら。
PS C:\Users\Someone> $obj | Get-Member TypeName: SampleClass Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() SayHello Method System.Object SayHello() ToString Method string ToString() id Property System.Object id {get;set;}
メンバ変数はプロパティ扱いになっている様子。
とりあえず使えるっぽいが、
は確認しておく必要がありそう。
仕様を理解し、使うことに問題がないと判断できれば
などが考えられそうだ。