PowerShellスクリプト内にC#のコードを埋め込んで実行することで、PowerShellの柔軟性とC#の強力な機能を組み合わせることができます。今回は、C#のコードをPowerShell内で実行し、変数を使用して計算結果を出力する方法を紹介します。
サンプルコード
以下のPowerShellスクリプトは、C#のコードを埋め込み、コンパイルして実行する方法を示しています。
$source = @"
using System;
public class SampleApp
{
public static void Main()
{
int a = 1;
int b = 1;
int result = a + b;
string output = a.ToString() + " + " + b.ToString() + " = " + result.ToString();
// または
//string output = string.Format("{0} + {1} = {2}", a, b, result);
Console.WriteLine(output);
}
}
"@
# Add-Type コマンドレットを使用してC#のコードをコンパイルし、PowerShell内で使用可能にします。
Add-Type -TypeDefinition $source -Language CSharp
# コンパイルされたC#のクラスのメソッドを呼び出して実行します。
[SampleApp]::Main()
スクリプトの解説
- C#のコードを埋め込む まず、PowerShellのヒアドキュメントを使用してC#のコードを埋め込みます。この方法では、ダブルクォートを1つだけ使用して文字列を連結します。
- C#のコードをコンパイルして実行可能にする 次に、
Add-Typeコマンドレットを使用してC#のコードをコンパイルし、PowerShell内で使用可能にします。 - C#のメソッドを呼び出す 最後に、コンパイルされたC#のクラスのメソッドを呼び出して実行します。
Add-Type コマンドレットのパラメータ一覧
Add-Type コマンドレットで指定できる主なパラメータは以下の通りです12:
-TypeDefinition <String>: コンパイルするソースコードを指定します。-Language <Language>: ソースコードの言語を指定します。既定値はCSharpです。-ReferencedAssemblies <String[]>: 参照するアセンブリを指定します。-OutputAssembly <String>: 出力アセンブリの名前を指定します。-OutputType <OutputAssemblyType>: 出力アセンブリの種類を指定します。Library、ConsoleApplication、WindowsApplicationなどがあります。-PassThru: 型を返します。これにより、新しい型を変数に格納できます。-IgnoreWarnings: コンパイル時の警告を無視します。-CompilerOptions <String[]>: コンパイラオプションを指定します。-Name <String>: 型の名前を指定します。-MemberDefinition <String[]>: メンバー定義を指定します。-Namespace <String>: 名前空間を指定します。-UsingNamespace <String[]>: 使用する名前空間を指定します。-Path <String[]>: ソースコードファイルのパスを指定します。-LiteralPath <String[]>: ソースコードファイルのリテラルパスを指定します。-AssemblyName <String[]>: 既存のアセンブリの名前を指定します。
実行結果
このスクリプトを実行すると、標準出力に「1 + 1 = 2」と表示されます。これにより、C#のコード内で変数を使用して計算を行い、その結果をPowerShellで表示することができます。


コメント