一部のファイルを移動していくつかのサービスをインストールするPowerShell V2
スクリプトがあります。ただし、PowerShellスクリプトのほぼ半分で.csファイルを呼び出して実行したいと思います。 C#
からのPowerShell
の呼び出しに関する記事はたくさんありますが、逆の方法はありません。 C#ファイルを一度だけ実行してから、PowerShellスクリプトの実行を続行したいのですが。
これを達成する方法を説明する記事の方向に誰かが私を向けることができるか、あなたがあなた自身を知っていて、それを助けることができれば、大いに感謝されます。
あなたは間違ったことを探しています。 Powershellから.NET Frameworkを呼び出すのと同じように、C#をアセンブリに配置し、そのパブリッククラス、関数、およびメソッドをPowerShellから呼び出します。
PowerShellからC#ソースをコンパイルして実行する場合は、「 週末スクリプト:PowerShell内からC#コードを実行する 」を参照してください。
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)
public class BasicTest
{
public static int Add(int a, int b)
{
return (a + b);
}
public int Multiply(int a, int b)
{
return (a * b);
}
}
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)
必要に応じて、*。batファイルからc#スクリプトを実行できます。
public static void Main()
メソッドを使用してc#スクリプト(例:Program.cs)を作成する@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()