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

从PowerShell脚本运行C#.cs文件,c#,powershell,C#,Powershell,我有一个PowerShell V2脚本,可以移动一些文件并安装一些服务。但是,我想在PowerShell脚本编写的中途调用并运行一个.cs文件。我从C#中找到了很多关于调用PowerShell的文章,但没有一篇是相反的。我只希望C#文件运行一次,然后继续运行PowerShell脚本 如果有人能为我指出一篇文章的方向,解释如何实现这一点,或者如果你了解自己,并能提供帮助,我将不胜感激 你找错东西了。将C#放入程序集中,并从PowerShell调用其公共类、函数和方法,就像从PowerShell调用

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


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

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

如果确实希望从PowerShell编译和运行C#source,请参阅
.

您可以使用
Add Type
编译C#code并将其添加到当前PowerShell会话中。然后调用C代码,就像调用任何其他.NET framework代码一样。这是添加类型上的
手册页中的一个示例:

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)

我看不出为什么我们不能直接从PowerShell运行
.cs
文件,所以我接受了Keith的剪报,并添加了缺少的
获取内容
部分,按照OP的要求执行操作。无需编译代码,只需编辑
-Path
参数以指向
.cs
文件

$source=获取内容-路径“A:\basic.cs”
添加类型-类型定义“$source”
#调用静态方法
[基本测试]:添加(4,3)
#创建实例并调用实例方法
$basicTestObject=新对象BasicTest
$basicTestObject.Multiply(5,2)
Basic.cs
公共类基本测试
{
公共静态整数添加(整数a、整数b)
{
返回(a+b);
}
公共整数乘法(整数a,整数b)
{
申报表(a*b);
}
}
如果需要,可以从*.bat文件运行c#脚本:

  • 使用
    publicstaticvoidmain()
    方法
  • 创建*.bat(例如Run.bat)文件并放置此代码:
  • @ECHO关闭
    请以管理员身份运行
    setlocal
    cd/d%~dp0
    设置csDir=%cd%\Program.cs
    动力壳^
    设置executionpolicy远程签名^
    $source=获取内容-原始-路径%csDir%^
    添加类型-类型定义“$source”^
    [程序]::Main()
    

  • 你不会“运行一个.cs文件”。。。这不是剧本。它将是一个更大项目的一部分,可能是一个控制台或wpf应用程序。您能否提供有关该文件的更多详细信息以及它是什么的一部分?是的,很抱歉,它是一个
    控制台应用程序
    ,用于编辑我拥有的
    XML
    文件。它主要只是更改XML文件中的文本,没有什么太复杂的。它只有一个名为
    class1
    的类。那么为什么不调用/运行编译后的可执行文件呢?如果它需要参数,你可以给它参数。这个例子可能会帮助你阅读脚本。它允许您使用PowerShell运行*.cs文件。您可能会发现更详细的信息
    获取内容
    可能需要
    -Raw
    我也复制错了。如果您使用他们的代码并将其字符串化,则不需要
    -Raw
    “$source”
    使用
    -Raw
    获取内容,只需将结果作为变量传递应该更可靠。