如何从运行powershell脚本中读取返回的值

时间:2015-08-18 10:27:07

标签: c# asp.net asp.net-mvc powershell asp.net-mvc-5

我正在使用asp.net mvc Web应用程序,我在我的Web应用程序中调用powershell脚本,如下所示: -

var shell = PowerShell.Create();

string PsCmd = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" + vCenterName + "';$vCenterAdmin = '" + vCenterUsername + "' ;$vCenterPassword = '" + vCenterPassword + "';" + System.Environment.NewLine;

PsCmd = PsCmd + "$VIServer = Connect-VIServer -Server $vCenterServer -User $vCenterAdmin -Password $vCenterPassword;" + System.Environment.NewLine;

PsCmd = PsCmd + "Get-VMHost " + System.Environment.NewLine;  

shell.Commands.AddScript(PsCmd);

var results = shell.Invoke();

现在我将获得以下值: -

enter image description here

所以任何人都可以尝试如何访问Build,或者循环使用NetworkInfo等值?谢谢 的修改 完整的跟踪图片: - enter image description here

1 个答案:

答案 0 :(得分:1)

使用dynamic关键字,您不必知道一个对象的强类型。事实上,无需事先知道类型,您可以按预期使用它:变量可以是任何

例如,我可以声明一个这样的方法:

    static void DynamicTest(dynamic arg)
    {
        Console.WriteLine(arg.aaa);
    }

DynamicTest访问了aaa中的arg字段(或属性),却不知道arg本身是否有aaa。使用dynamic意味着您不希望编译器检测到您可能或可能无法从实际上没有它的变量访问某些内容的可能错误。

您可以使用以下方法调用此方法:

DynamicTest(new {aaa = "I am accessible"});

它会运行,您也可以使用以下方法调用此方法:

DynamicTest(1); // I will cause runtime exception

因此,在您的具体情况下,您可以将变量result定义为动态,因为您现在知道您将获得一个包含您要使用的多个属性的变量。

var res = shell.Invoke()[0];
dynamic obj = res.BaseObject;

因此,您可以像常规变量一样使用它(当然没有IntelliSense)。

Console.WriteLine(obj.Build); // Now I can compile yay!

下面。