PowerShellでC#のコードを実行し、変数を使用して計算結果を出力する方法

Tech

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()

スクリプトの解説

  1. C#のコードを埋め込む まず、PowerShellのヒアドキュメントを使用してC#のコードを埋め込みます。この方法では、ダブルクォートを1つだけ使用して文字列を連結します。
  2. C#のコードをコンパイルして実行可能にする 次に、Add-Type コマンドレットを使用してC#のコードをコンパイルし、PowerShell内で使用可能にします。
  3. C#のメソッドを呼び出す 最後に、コンパイルされたC#のクラスのメソッドを呼び出して実行します。

Add-Type コマンドレットのパラメータ一覧

Add-Type コマンドレットで指定できる主なパラメータは以下の通りです12

  • -TypeDefinition <String>: コンパイルするソースコードを指定します。
  • -Language <Language>: ソースコードの言語を指定します。既定値は CSharp です。
  • -ReferencedAssemblies <String[]>: 参照するアセンブリを指定します。
  • -OutputAssembly <String>: 出力アセンブリの名前を指定します。
  • -OutputType <OutputAssemblyType>: 出力アセンブリの種類を指定します。LibraryConsoleApplicationWindowsApplication などがあります。
  • -PassThru: 型を返します。これにより、新しい型を変数に格納できます。
  • -IgnoreWarnings: コンパイル時の警告を無視します。
  • -CompilerOptions <String[]>: コンパイラオプションを指定します。
  • -Name <String>: 型の名前を指定します。
  • -MemberDefinition <String[]>: メンバー定義を指定します。
  • -Namespace <String>: 名前空間を指定します。
  • -UsingNamespace <String[]>: 使用する名前空間を指定します。
  • -Path <String[]>: ソースコードファイルのパスを指定します。
  • -LiteralPath <String[]>: ソースコードファイルのリテラルパスを指定します。
  • -AssemblyName <String[]>: 既存のアセンブリの名前を指定します。

実行結果

このスクリプトを実行すると、標準出力に「1 + 1 = 2」と表示されます。これにより、C#のコード内で変数を使用して計算を行い、その結果をPowerShellで表示することができます。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました