我正在使用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();
现在我将获得以下值: -
答案 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!
下面。