今回はPowerShell内でC#コードでクラスを書いて、そのC#クラスをPowerShellからそのまま使うというTipsです。Add-Typeというコマンドレットを使います。C#からPowerShell呼び出しというのはよくありますがその逆です。
元になるC#コード
まずは簡単なC#のコード書いてみます。
SpeakerクラスのSaySomething3Timesというメソッドを使って、
引数の文字列を3回書きだす単純なプログラムです。
using System; namespace Speaker { class Program { static void Main(string[] args) { Speaker.SaySomething3Times(args[0]); } } public static class Speaker { public static void SaySomething3Times(string word) { Console.WriteLine(word + "!" + word + "!" + word + "!"); } } }
実行するとこんな感じです。
>Speaker.exe HELLO HELLO!HELLO!HELLO!
Powershellから呼び出し
先ほどのC#コードをPowerShellに組み込んでみます。
$sourceという変数にC#ソースコードを文字列として格納して、$assembliesで定義された"System"への参照を定義しながら、Add-Typeコマンドレットで組み込んでます。
param($word) $assemblies = ( "System" ) $source = @" using System; public static class Speaker { public static void SaySomething3Times(string word) { Console.WriteLine(word + "!" + word + "!" + word + "!"); } } "@ Add-Type -ReferencedAssemblies $assemblies -TypeDefinition $source -Language CSharp [Speaker]::SaySomething3Times($word)
実行するとこんな感じです。
PS M:\TEMP> .\Speaker.ps1 HELLO HELLO!HELLO!HELLO!
あまり使う場面無いかもしれないですが、ちょっと面白いです。
Powershell内でのC#クラスのもう少し詳しい使い方はこちらに。
Powershell内で書いたC#で書いたクラスを使う(コンストラクターやプロパティの利用) - YOMON8.NET