2014-09-05 67 views
1

我发现了一篇technet博客文章,表示可以让PowerShell使用C#代码。 文章:Using CSharp (C#) code in Powershell scripts让PowerShell脚本使用C#代码,然后将参数传递给Main方法

我发现我需要的C#代码在PowerShell中工作的格式,但如果它没有通过Main方法的参数([namespace.class]::Main(foo))脚本抛出一个错误。

有没有一种方法,我可以传递一个“开”或“关”字符串的主要方法,然后根据哪个字符串传递运行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) 

回答

1

好吧,如果您要编译并运行C#代码,您需要编写有效的C#代码。在PowerShell方面,如果您从PowerShell调用Main,则需要将它传递给参数。 PowerShell会自动将一个参数放入数组中,但如果您没有参数,它将不会插入参数。这就是说,它不清楚为什么这是一种主要方法。这不是可执行文件。很可能只有两种静态方法,TurnOnTurnOff。下面的代码编译并运行,如你所见:

$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") 
+0

我同意迈克在这里。 OP的代码看起来像是一个带有标准Main入口点的exe文件。将其修改为图书馆将会更直接。另外,如果您在这里使用单引号字符串,则不必在其中使用双引号。 :-) – 2014-09-05 22:52:16