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

时间:2014-07-21 14:56:31

标签: c# powershell

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

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

4 个答案:

答案 0 :(得分:25)

您可以使用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)

答案 1 :(得分:24)

我认为我们没有理由直接从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);
    }
}

答案 2 :(得分:8)

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

如果您真的想从PowerShell编译和运行C#源代码,请参阅 Weekend Scripter: Run C# Code from Within PowerShell

答案 3 :(得分:0)

如果需要,可以从* .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. 运行