C# 枚举PowerShell对象';s属性抛出
我有一个使用powershell的简单程序。这只是一个概念证明,我在一个更大的应用程序中使用相同的代码。问题是下面代码中某些属性的值无法读取。读取Value属性会引发GetValueInvocationException 事实上,这甚至发生在PowerShell SDK附带的一个Microsoft示例项目中。这是为什么?有解决办法吗C# 枚举PowerShell对象';s属性抛出,c#,powershell,C#,Powershell,我有一个使用powershell的简单程序。这只是一个概念证明,我在一个更大的应用程序中使用相同的代码。问题是下面代码中某些属性的值无法读取。读取Value属性会引发GetValueInvocationException 事实上,这甚至发生在PowerShell SDK附带的一个Microsoft示例项目中。这是为什么?有解决办法吗 static void Main(string[] args) { var powerShell = System.Management.A
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();
}
这要么是出于设计(毕竟,它是getter抛出的目标对象属性),要么是一个问题(如果这个效果在PowerShell中不是故意的)。在这两种情况下,我们现在都不能对此做太多。也就是说,我们应该在这样的vcase中使用try/catch方法。我们的一个选择是将报告提交给:
尝试在C#code中获取目标对象(它是
System.Diagnostics.Process
,通过结果对象的BaseObject
属性获取)并访问罪犯属性。它很可能也会抛出。是的,你可能是对的。我应该忽略这些属性。问题是,我一般都是这样做的,在代码中并不知道BaseObject是什么。我之前所做的(并且想要改变的)是使用PowerShell作业API。那我就没有这样的问题了。但是当我查看返回的属性时,我发现在我的示例中抛出异常的属性在使用作业方法时不可用。因此,我想尝试/抓住是一条路。谢谢:)是的,try/catch是我在自定义主机中处理未知对象(read,属性获取程序可能抛出的对象)时所做的操作。