はじめに
PowerShell 2.0ではAdd-Typeというコマンドレットが追加されました。このコマンドレットを使用すると、C#やVB.NETのソースコードをスクリプト内に組み込んだり、ファイルから読み込んで利用することができます。
これにより、既存の資産を用いたり、他のC#/VB.NETエンジニアにメソッドを作成してもらって利用したりといったことが可能となります。
対象読者
PowerShellの基本的な操作ができる方。
PowerShellについて学びたい方は、PowerShell入門の連載を参照ください。
他言語を利用する
それでは他言語を利用する方法についてみていきましょう。
最初にC#のコードを利用してAdd-Typeコマンドレットの基本的な使用方法について説明し、その後でVB.NETやF#といったコードを利用する方法について触れます。
C#のコードを利用する
次のコードはC#で書かれたSampleClassというクラス定義です。このクラスにはSayHelloとSayHello2という2つのメソッドがあります。
public class SampleClass{ public static string SayHello(string Name) { return "Hello " + Name; } public static string SayHello2(string Name) { return "こんにちは" + Name + "さん"; } }
このコードをヒア文字列を使用して、次のように$Sourceという変数に代入します(変数名は自由に付けてかまいません)。
$source=@" public class SampleClass{ public static string SayHello(string Name) { return "Hello " + Name; } public static string SayHello2(string Name) { return "こんにちは" + Name + "さん"; } } "@
次に、変数$Sourceに格納されたコードをAdd-TypeコマンドレットでPowerShellから利用できるようにします。
Add-Typeコマンドレットの基本構文を次に示します。
Add-Type -Language 使用する言語 -TypeDefinition 利用するコード
-Languageパラメータには表1の値を指定することができます。このことからも分かるように、C#、VB.NET、JScriptのソースコードを利用できます。
言語 | パラメータ値 |
C# | CSharp |
CSharpVersion3 | |
VB.NET | VisualBasic |
JScript | JScript |
それではAdd-Typeコマンドレットを使用して、PowerShellからSampleClassを利用できるようにして見ましょう。
Add-Type -Language CSharp -TypeDefinition $Source
-Languageは既定値がCSharpとなっています。このためC#を利用する場合は-Languageパラメータを省略して次のように記述できます。
Add-Type -TypeDefinition $Source
Add-Typeコマンドレットで登録したクラスを利用するには次のようにします。
[クラス名]::メソッド名
たとえば、SampleClassのSayHelloメソッドを利用するには
[SampleClass]::SayHello("CodeZine")
のようにします。
実行すると図1のようになります。