5
votes

How to export powershell's hashtable into CSV file using Export-Csv ?

PS C:\>$UsersAndGroups
Name                           Value                                                                                                                                                             
----                           -----                                                                                                                                                             
user1                          {Group2}                                                                                                                    
user2                          {Group1, Group2, Group3}                                                                                                                                   
user3                          {Group3, Group4}     

I want to get this into CSV file where each key-value pair is in new line. First column should allways be key and next columns should be values.

Like this:

|col1    col2    col3    col4   
 +------------------------------  
1|User1  Group2  
2|User2  Group1  Group2  Group3 
3|User3  Group3  Group4

Thank you very much.

2

2 Answers

3
votes

Try something like this:

PS> $ht = @{user1=,'Group2';user2='Group1','Group2','Group3';
            user3='Group3','Group4'}

PS> $ht.GetEnumerator() | 
     Foreach {$obj = new-object psobject -prop @{col1=$_.Name}; $_.Value | 
        Foreach {$i=2} `
                {Add-Member NoteProperty "col$i" $_ -Inp $obj; $i++} {$obj} } | 
     Sort {$_.psobject.properties.count} -desc | ConvertTo-Csv -NoTypeInformation

"col1","col2","col3","col4"
"user2","Group1","Group2","Group3"
"user1","Group2",,
"user3","Group3","Group4",
1
votes

One way:

 $usersandgroups = @{
 user1 = @("group2")
 user2 = @("group1","group2","group3")
 user3 = @("groupt3","group4")
 }

 $exp = @("col1,col2,col3,col4")

 $usersandgroups.keys |%{
 $exp += (@($_) + $usersandgroups.$_) -join ","
 }
 $exp
 $exp  | out-file test.csv
 $imp = import-csv test.csv
 $imp | ft -auto

 col1,col2,col3,col4
 user3,groupt3,group4
 user1,group2
 user2,group1,group2,group3

 col1  col2    col3   col4  
 ----  ----    ----   ----  
 user3 groupt3 group4       
 user1 group2               
 user2 group1  group2 group3