web-dev-qa-db-ja.com

PowerShellスクリプトからC#.csファイルを実行する

一部のファイルを移動していくつかのサービスをインストールするPowerShell V2スクリプトがあります。ただし、PowerShellスクリプトのほぼ半分で.csファイルを呼び出して実行したいと思います。 C#からのPowerShellの呼び出しに関する記事はたくさんありますが、逆の方法はありません。 C#ファイルを一度だけ実行してから、PowerShellスクリプトの実行を続行したいのですが。

これを達成する方法を説明する記事の方向に誰かが私を向けることができるか、あなたがあなた自身を知っていて、それを助けることができれば、大いに感謝されます。

22
Foster

あなたは間違ったことを探しています。 Powershellから.NET Frameworkを呼び出すのと同じように、C#をアセンブリに配置し、そのパブリッククラス、関数、およびメソッドをPowerShellから呼び出します。

PowerShellからC#ソースをコンパイルして実行する場合は、「 週末スクリプト:PowerShell内からC#コードを実行する 」を参照してください。

8
Robert Harvey

PowerShellから.csファイルを直接実行できない理由はないので、Keithの抜粋を使用して、欠落しているGet-Contentの部分を追加し、OPが要求するとおりに実行しました。コードをコンパイルする必要はありません。-Path引数を編集して.csファイルを指すようにします。

$source = Get-Content -Path "A:\basic.cs"
Add-Type -TypeDefinition "$source"

# Call a static method
[BasicTest]::Add(4, 3)

# Create an instance and call an instance method
$basicTestObject = New-Object BasicTest
$basicTestObject.Multiply(5, 2)

Basic.cs

public class BasicTest
{
    public static int Add(int a, int b)
    {
        return (a + b);
    }

    public int Multiply(int a, int b)
    {
        return (a * b);
    }
}
34
Knuckle-Dragger

Add-Typeを使用してC#コードをコンパイルし、現在のPowerShellセッションに追加できます。次に、他の.NET Frameworkコードと同じようにC#コードを呼び出します。これはAdd-Typeのman pageの例です。

PS C:\>$source = @"
public class BasicTest
{
  public static int Add(int a, int b)
    {
        return (a + b);
    }
  public int Multiply(int a, int b)
    {
    return (a * b);
    }
}
"@

PS C:\>Add-Type -TypeDefinition $source
PS C:\>[BasicTest]::Add(4, 3)
PS C:\>$basicTestObject = New-Object BasicTest
PS C:\>$basicTestObject.Multiply(5, 2)
31
Keith Hill

必要に応じて、*。batファイルからc#スクリプトを実行できます。

  1. public static void Main()メソッドを使用してc#スクリプト(例:Program.cs)を作成する
  2. * .bat(Run.batなど)ファイルを作成し、次のコードを配置します。
@ECHO off
Echo Please run as administrator
setlocal
cd /d %~dp0
set csDir=%cd%\Program.cs
powershell ^
set-executionpolicy remotesigned; ^
$source = Get-Content -Raw -Path %csDir%; ^
Add-Type -TypeDefinition "$source"; ^
[Program]::Main()
  1. 走る
0
GLeBaTi