我有一个PowerShell V2
脚本可以移动一些文件并安装一些服务。但是,我想在PowerShell脚本的中途调用并运行一个.cs文件。我发现很多关于从PowerShell
调用C#
的文章,但没有相反的方式。我只想运行一次C#文件然后继续运行PowerShell脚本。
如果有人能指出我的方向,解释如何实现这一点,或者如果你了解自己并可以提供帮助,我将不胜感激。
答案 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#脚本:
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()