从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
获取内容,只需将结果作为变量传递应该更可靠。