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

Fos*_*ter 21 c# powershell

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

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

Knu*_*ger 33

我认为我们没有理由不能直接从powershell运行.cs文件,因此我采用了Keith的剪辑并添加了缺少的get-content部分来完成OP所要求的内容.无需编译代码,只需编辑.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)
Run Code Online (Sandbox Code Playgroud)

显然我把这个片段添加到了我的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • “获取内容”可能需要“-原始” (3认同)

Kei*_*ill 31

您可以使用它Add-Type来编译C#代码并将其添加到当前的PowerShell会话中.然后像调用任何其他.NET框架代码一样调用C#代码.这是来自man pageAdd-Type 的示例:

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)
Run Code Online (Sandbox Code Playgroud)


Rob*_*vey 8

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

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