问题描述
我有一个在使用 .Invoke()
包时调用 System.Management.Automation
方法时返回的 PSObject 项目列表。在调试时,我可以在 BaSEObject
和 ImmediateBaSEObject
属性中看到要打印的对象的值。但是,在使用 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
对象,只有相关数据的数组。由于隐私原因隐藏。
这是调试期间的 result
对象 > BaSEObject 视图。 result
对象的 members 属性没有相关数据。
提前致谢。
解决方法
我通过创建 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());