如何在 C# 中遍历 PSObject 的 BaseObject 属性

问题描述

我有一个在使用 .Invoke() 包时调用 System.Management.Automation 方法时返回的 PSObject 项目列表。在调试时,我可以在 BaSEObjectImmediateBaSEObject 属性中看到要打印的对象的值。但是,在使用 foreach 循环遍历结果并打印每个项目的 BaSEObjects 时,只会打印项目的类型 (System.Collections.ArrayList)。如何将 BaSEObjects 的值存储到变量中?

这是代码和一些截图:

using (var ps = PowerShell.Create())
{
    var results = ps.AddScript(File.ReadAllText(@".\PSScripts\test_func2.ps1")).Invoke();
    foreach (PSObject result in results)
    {
        if (result != null)
        {
             outList.Add(result.BaSEObject.ToString())
        }
    }
}

这是调试时的results对象,只有相关数据的数组。由于隐私原因隐藏。

This is the result object,which only has arrays of relevant data

这是调试期间的 result 对象 > BaSEObject 视图。 result 对象的 members 属性没有相关数据。

results object

这是我在执行上述代码时得到的输出

output on execution gives System.Collections.Arraylist as output

提前致谢。

解决方法

我通过创建 IList 对象并将我的 result 对象转换为 IList 解决了这个问题。然后我可以遍历 IList 变量的值。这里,res 是一个 List<String[]> 对象,声明为函数级作用域,可以保存 results 对象的所有值。

List<string> temp = new List<string>();
IList collection = (IList)result.BaseObject;
foreach(var x in collection)
{
    temp.Add((string)x);
}
res.Add(temp.ToArray());

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...