枚举PowerShell对象的属性抛出

时间:2011-06-22 09:19:41

标签: c# powershell

我使用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();
    }

1 个答案:

答案 0 :(得分:2)

这可能是设计(毕竟,目标对象属性getter抛出)或问题(如果此效果在PowerShell中不是故意的)。在这两种情况下,我们现在都无法做很多事情。也就是说,我们应该在这样的vcases中使用try / catch方法。我们的一个选择是将报告提交至:https://connect.microsoft.com/PowerShell/Feedback

尝试在C#代码中获取目标对象(它是System.Diagnostics.Process,通过结果对象的BaseObject属性获取它)并访问该culprit属性。它也会更有可能抛出。