2
我有这个使用PowerShell的简单程序。这只是一个概念证明,我在一个更大的应用程序中使用相同的代码。问题是无法读取下面代码中某些属性的值。读取Value属性会引发GetValueInvocationException异常。枚举PowerShell对象的属性抛出
这实际上甚至发生在随PowerShell SDK一起提供的Microsoft示例项目中。为什么是这样的,有没有解决方案?
static void Main(string[] args)
{
var powerShell = System.Management.Automation.PowerShell.Create();
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Runspace.DefaultRunspace = runspace;
powerShell.Runspace = runspace;
powerShell.AddScript("Get-Process");
var results = powerShell.Invoke();
foreach (var prop in results.First().Properties)
{
try
{
Console.WriteLine(prop.Name + " : " + prop.Value);
}
catch (Exception e)
{
Console.WriteLine(string.Format("Exception {0} on {1}", e.GetType(), prop.Name));
}
}
Console.ReadKey();
}
是的,你可能是对的。我应该忽略这些属性。事情是,我一般这样做,并不知道代码中的BaseObject是什么。我之前(并想改变)所做的是使用PowerShell Job API。然后我没有这样的问题。但是当我查看返回的属性时,我发现在使用Job方法时,在我的示例中抛出异常的属性不可用。所以我想try/catch是要走的路。谢谢:) – LinusK
是的,try/catch是我在自定义主机中处理未知对象时所做的事情(读取属性获取器可能抛出的对象)。 –