【发布时间】:2017-05-08 18:45:02
【问题描述】:
我编写了一个 Powershell 脚本,它读取一个 CSV 文件并从数据中返回一个预先确定的集合。以下是所述脚本的示例输出。
Count Name
------ ------
12 Rubies
3 Pearls
20 Emeralds
我可以通过将结果存储在 PSObject 中来获得 C# 中的结果,如下所示:
var shell = PowerShell.Create();
shell.Commands.AddScript("C:\\Scripts\\Powershell\\Get-MyData.ps1");
Collection<PSObject> results = shell.Invoke();
现在,当我期待一个对象时,我可以获取每个值并将它们分配给如下变量:
foreach (PSObject psObject in results)
{
localVariable = Convert.ToString(psObject.Properties["Name"].Value);
}
但是,我无法将此解决方案转换为动态解决方案。也就是说,预计行数会有所不同。因此,当源是 SQL 数据库之前,我已经使用类似于here 发布的解决方案实现了这一点,所以我假设数据表应该是可行的方法,但我无法让它在这种情况下工作。有什么想法或建议吗?谢谢!
注意:这里的 Powershell 脚本组件是强制性的,因为它包括其他机制来制定输出,所以虽然我可以使用 C# 从 CSV 文件中读取,但这根本不是一个选项。
【问题讨论】:
-
你有什么问题?据我了解,您正在迭代所有结果并毫无问题地访问其属性,那么由可变行数引起的确切问题是什么?
-
嗨 Lucas,如果我知道有多少行,我只能获取值。 (数组引用类似于
array[0]或'array[1])。我正在尝试创建一个可以将所有结果存储到数据表的函数。希望能解决这个问题。 -
当您使用 foreach 语句进行迭代时,您不需要数组引用。即使你这样做了,你也可以使用 for 语句 for i
-
你能把powershell脚本的部分贴出来吗?您的 C# 代码看起来正确,可能问题出在 powershell 中。
标签: c# powershell datatable psobject