我有一个 PowerShell V2
脚本,用于移动一些文件并安装一些服务。然而,我想在 PowerShell 脚本运行到一半时调用并运行 .cs 文件。我找到了很多关于从 C#
调用 PowerShell
的文章,但没有相反的方法。我只希望 C# 文件能够运行一次,然后继续运行 PowerShell 脚本。
如果有人能指点我如何完成这个任务的文章或者您自己知道并能提供帮助,那将不胜感激。
我有一个 PowerShell V2
脚本,用于移动一些文件并安装一些服务。然而,我想在 PowerShell 脚本运行到一半时调用并运行 .cs 文件。我找到了很多关于从 C#
调用 PowerShell
的文章,但没有相反的方法。我只希望 C# 文件能够运行一次,然后继续运行 PowerShell 脚本。
如果有人能指点我如何完成这个任务的文章或者您自己知道并能提供帮助,那将不胜感激。
我认为我们完全可以直接从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);
}
}
Get-Content
可能需要使用 -Raw
参数。 - StingyJack-Raw
。"$source"
- Carl WalshGet-Content
命令时,加上-Raw
参数并将结果直接传递给变量应该更可靠。 - Ben Philipp您可以使用Add-Type
来编译C#代码并将其添加到当前的PowerShell会话中。然后,您就可以像调用其他.NET框架代码一样调用C#代码。以下是来自man页面
的示例:
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()
.cs
文件可以直接读取。Add-Type -Path 'program.cs'