簡體   English   中英

在C#中將Powershell PSObject作為DataTable返回

[英]Return Powershell PSObject as DataTable in C#

我編寫了一個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數據庫時,使用類似於這里發布的解決方案,所以我假設數據表應該是要走的路,但我不能讓它在這種情況下工作。 任何想法或建議? 謝謝!

注意:這里的Powershell腳本組件是強制性的,因為它包含了其他制定輸出的機制,所以當我只能使用C#從CSV文件中讀取時,這根本不是一個選項。

我從您的問題中理解的是,您希望將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);
   }
}

希望它對你有所幫助。

提供文件: 文件1文件2

既然你已經使用PowerShell來讀取csv文件,為什么不繼續呢?

在開始使用C#進行管理之前,您可以調用powershell命令/腳本來迭代* .ps1文件的結果。

在c#中調用腳本非常容易,您不必將腳本創建為文件。 您可以直接發送腳本文本並調用它。

也許你甚至可以將2類似於:

var shell = PowerShell.Create();
shell.Commands.AddScript("C:\\Scripts\\Powershell\\Get-MyData.ps1 | foreach {do-something $_}");
Collection<PSObject> results = shell.Invoke();

請注意,我在返回腳本結果后添加了一個管道。 請記住,'AddScript'非常類似於向powershell.exe發送一堆文本。 我之前已將整個腳本文件從嵌入式資源推送到此方法。

使用Linq:

IEnumerable<dynamic> dynamicResults = from item in results                                     
                                      select new { Name = item.Name, Count = item.Count };

然后設置myDataGrid.ItemsSource = dynamicResults;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM