2012-05-02 15 views
1

有沒有辦法在數據表中展開/展平行?我有變量$表中有2列的數據。在第一列中存儲[string]值,而在第二列中存儲[string []]數組值,其中包含至少2個值。這裏有一個這樣的行的例子:如何展開(展平)其中一列包含數組的數據表中的行?

DistinguishedName      GroupNames 
-----------------      ---------- 
Applications/FarmName/Notepad   {Domain\Group1, Domain\Group2} 

我想要它變平並導出到例如CSV格式,而第一列保留「關鍵值」DistinguishedName,而其他所有列都使用從GroupNames列擴展的特定值填充。所需輸出的示例如下:

Applications/FarmName/Notepad; Domain\Group1; Domain\Group2 
+0

如何獲取DataColumn中的字符串[]?根據這個鏈接,唯一支持的數組是Byte。 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx – Paparazzi

回答

1

如果你的意圖導出爲CSV文件,可能的解決方案可能創建自己的PSObject和dynamicaly填充它的屬性。

事情是這樣的:

$expandedObjects = @() 
$table | % { 
    #assuming $_ reffers to actual row 

    $obj = new-object PSObject 
    $obj | Add-Member -MemberType NoteProperty -Name "DistinguishedName" -Value $_.DistinguishedName 

    $i = 0 # for dynamic property naming 
    $_.GroupNames | % { 
     # assuming $_ reffers to actual GroupName value 
     $obj | Add-Member -MemberType NoteProperty -Name $("GroupName{0}" -f $i++) -Value $_ 
    } 
    $expandedObjects += $obj 
} 
$expandedObjects | export-csv .. 

我沒有測試的代碼,所以可能會有一些錯誤。另外我不知道你的$ table是否屬於可精確的類型。但這個想法應該清楚。

+0

腳本需要稍微更正,而腳本塊未被評估。 {「GroupName {0}」-f $ i ++}應該被替換爲$(「GroupName {0}」-f $ i ++)。 – evianton

+0

謝謝,更正。 – jumbo