[英]How to to Convert PSObject to Stream output or DataTable using C# Powershell System.Management.Automation
[英]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);
}
}
希望它對你有所幫助。
既然你已經使用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.