在C#中将Powershell PSObject作为DataTable返回

Yad*_*Yad 5 c# datatable powershell psobject

我编写了一个Powershell脚本,它读取CSV文件并从数据中返回一个预定的集合.以下是所述脚本的示例输出.

Count     Name
------   ------
  12      Rubies
   3      Pearls
  20      Emeralds
Run Code Online (Sandbox Code Playgroud)

我可以通过将它存储在PSObject中来获得C#中的结果:

var shell = PowerShell.Create();
shell.Commands.AddScript("C:\\Scripts\\Powershell\\Get-MyData.ps1");
Collection<PSObject> results = shell.Invoke();
Run Code Online (Sandbox Code Playgroud)

现在当我期待一个对象时,我能够获得每个值并将它们分配给这样的变量:

foreach (PSObject psObject in results)
{
   localVariable = Convert.ToString(psObject.Properties["Name"].Value);
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法将此解决方案转换为动态解决方案.也就是说,预计行数会有所不同.所以我之前已经实现了这个,当源是一个SQL数据库时,使用类似于这里发布的解决方案,所以我假设数据表应该是要走的路,但我不能让它在这种情况下工作.任何想法或建议?谢谢!

注意:这里的Powershell脚本组件是强制性的,因为它包含了其他制定输出的机制,所以当我只能使用C#从CSV文件中读取时,这根本不是一个选项.

小智 1

我从您的问题中了解到,您希望使用 DataTable 进行进一步的数据处理,并且希望在各自的集合中使用它。

您可以像这样继续:

DataTable dt=new DataTable();
dt.Colums.Add("Count");
dt.Colums.Add("Name");
foreach (PSObject psObject in results)
{
   foreach(PSPropertyInfo prop in psObject.Properties)
   {
     var count=prop.Name; 
     var name=prop.Value;
     //In other words generate output as you desire.
     dt.Rows.Add(count,name);
   }
}
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。

存在文档:文档 1文档 2