【发布时间】:2021-09-24 11:57:36
【问题描述】:
我有一个 PSObject 项目列表,这些项目是在使用 System.Management.Automation 包时调用 .Invoke() 方法时返回的。在调试它时,我可以在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 属性没有相关数据。
这是我在执行上述代码时得到的输出:
提前致谢。
【问题讨论】:
-
如果您希望接收自定义对象而不是 ArrayLists,您需要查看您的 ps1 脚本并修改它以返回对象
-
谢谢丹尼尔。我解决了这个问题,但这似乎是更好的方法。事情是,我已经从脚本中返回了一个基本类型 System.Array 的对象数组。我能改变什么?
-
我必须查看您的 ps1 脚本才能了解您如何输出数组列表而不是对象的集合。您可以使用该代码发布一个新问题,询问如何将输出从数组列表更改为对象以获得进一步的帮助。无论哪种方式,为您找到解决问题的方法感到高兴。 :)
标签: c# powershell system.management