从PowerShell脚本运行C#.cs文件

我有一个PowerShell V2脚本,可以移动一些文件并安装一些服务。 但是,我想在PowerShell脚本的中途调用并运行一个.cs文件。 我发现很多关于从C#调用PowerShell的文章,但没有相反的方法。 我只想运行一次C#文件然后继续运行PowerShell脚本。

如果有人能指出我的方向,解释如何完成这一点,或者如果你了解自己并可以提供帮助,我将不胜感激。

你在寻找错误的东西。 将C#放入程序集中,并从PowerShell调用其公共类,函数和方法,就像从Powershell调用.NET Framework一样。

如果您真的想从PowerShell编译和运行C#源代码,请参阅Weekend Scripter:在PowerShell中运行C#代码 。

我认为没有理由不能直接从powershell运行.cs文件,因此我采用了Keith的剪辑,并添加了缺少的get-content部分来完成OP所要求的内容。 无需编译代码,只需编辑.cs文件的路径即可

 $source = Get-Content -Path "A:\basic.cs" Add-Type -TypeDefinition "$source" [BasicTest]::Add(4, 3) $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); } } 

您可以使用Add-Type编译C#代码并将其添加到当前的PowerShell会话中。 然后像调用任何其他.NET框架代码一样调用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#脚本:

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