我使用PowerShell这个简单的程序。这只是一个概念证明,我在一个更大的应用程序中使用相同的代码。问题是无法读取下面代码中某些属性的值。读取Value属性会抛出GetValueInvocationException。
这实际上甚至发生在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();
}
答案 0 :(得分:2)
这可能是设计(毕竟,目标对象属性getter抛出)或问题(如果此效果在PowerShell中不是故意的)。在这两种情况下,我们现在都无法做很多事情。也就是说,我们应该在这样的vcases中使用try / catch方法。我们的一个选择是将报告提交至:https://connect.microsoft.com/PowerShell/Feedback
尝试在C#代码中获取目标对象(它是System.Diagnostics.Process
,通过结果对象的BaseObject
属性获取它)并访问该culprit属性。它也会更有可能抛出。