我发现了一篇technet博客文章,上面说PowerShell可以使用C#代码。文章:在Powershell脚本中使用CSharp(C#)代码
我找到了让C#代码在PowerShell中工作所需的格式,但如果它没有向Main
方法传递参数([namespace.class]::Main(foo)
),脚本就会抛出错误。
有没有一种方法可以将字符串"on"或"off"传递给main方法,然后根据传递的字符串运行if语句?如果可能的话,你能提供例子和/或链接吗?
以下是我目前尝试构建代码的方式。
$Assem = @( //assemblies go here)
$source = @"
using ...;
namespace AlertsOnOff
{
public class onOff
{
public static void Main(string[] args )
{
if(args == on)
{//post foo }
if(arge == off)
{ //post bar }
}
"@
Add-Type -TypeDefinition $Source -ReferencedAssumblies $Assem
[AlertsOnOff.onOff]::Main(off)
#PowerShell script code goes here.
[AlertsOnOff.onOff]::Main(on)
首先,如果要编译并运行C#代码,则需要编写有效的C#代码。在PowerShell方面,如果从PowerShell调用Main
,则需要向其传递一个参数。PowerShell会自动为您在数组中放入一个参数,但如果您没有参数,它不会插入。也就是说,目前还不清楚为什么这是一个主要的方法。它不是可执行文件。它很可能只有两个静态方法,TurnOn
和TurnOff
。下面的代码编译并运行,根据需要进行修改:
$source = @"
using System;
namespace AlertsOnOff
{
public class onOff
{
public static void Main(string[] args)
{
if(args[0] == `"on`")
{
Console.WriteLine(`"foo`");
}
if(args[0] == `"off`")
{
Console.WriteLine(`"bar`");
}
}
}
}
"@
Add-Type -TypeDefinition $Source
[AlertsOnOff.onOff]::Main("off")
# Other code here
[AlertsOnOff.onOff]::Main("on")