2012-05-02 4 views
1

は、データテーブルで行を展開/平坦化する方法がありますか?私は2つの列を持つ変数$表のデータを持っています。最初の列には[string]値が格納され、2番目の列には少なくとも2つの値を含む[string []]配列値が格納されます。ここにそのような行の例があります:列の1つに配列が含まれているデータテーブルの行を展開(平坦化)する方法はありますか?

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

私はそれを平らにして、 CSV形式で、最初の列は「キー値」を保持します。DistinguishedNameと他のすべての列は、GroupNames列から展開された特定の値で埋められます。所望の出力の例は次のとおりです。あなたの意図は、CSV形式にエクスポートしている

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

DataColumnで文字列[]をどのように取得しますか?このリンクによれば、サポートされる唯一の配列はバイトです。 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx – Paparazzi

答えて

1

場合は、可能な解決策は、独自の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 .. 

私は、コードをテストしていない、ので、いくつかのミスがあるかもしれません。また、あなたの$テーブルが正しいかどうかは正確にはわかりません。しかし、アイデアははっきりしているはずです。

+0

scriptblockが評価されないうちに、スクリプトを少し修正する必要があります。 {"GroupName {0}" -f $ i ++}は$( "GroupName {0}" -f $ i ++)に置き換えてください。 – evianton

+0

ありがとうございました。 – jumbo

関連する問題