C# 枚举PowerShell对象';s属性抛出

C# 枚举PowerShell对象';s属性抛出,c#,powershell,C#,Powershell,我有一个使用powershell的简单程序。这只是一个概念证明,我在一个更大的应用程序中使用相同的代码。问题是下面代码中某些属性的值无法读取。读取Value属性会引发GetValueInvocationException 事实上,这甚至发生在PowerShell SDK附带的一个Microsoft示例项目中。这是为什么?有解决办法吗 static void Main(string[] args) { var powerShell = System.Management.A

我有一个使用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();
    }
这要么是出于设计(毕竟,它是getter抛出的目标对象属性),要么是一个问题(如果这个效果在PowerShell中不是故意的)。在这两种情况下,我们现在都不能对此做太多。也就是说,我们应该在这样的vcase中使用try/catch方法。我们的一个选择是将报告提交给:


尝试在C#code中获取目标对象(它是
System.Diagnostics.Process
,通过结果对象的
BaseObject
属性获取)并访问罪犯属性。它很可能也会抛出。是的,你可能是对的。我应该忽略这些属性。问题是,我一般都是这样做的,在代码中并不知道BaseObject是什么。我之前所做的(并且想要改变的)是使用PowerShell作业API。那我就没有这样的问题了。但是当我查看返回的属性时,我发现在我的示例中抛出异常的属性在使用作业方法时不可用。因此,我想尝试/抓住是一条路。谢谢:)是的,try/catch是我在自定义主机中处理未知对象(read,属性获取程序可能抛出的对象)时所做的操作。