【问题标题】:How to export powershell's hashtable into CSV file using Export-Csv?如何使用 Export-Csv 将 powershell 的哈希表导出为 CSV 文件?
【发布时间】:2011-07-01 14:54:27
【问题描述】:

如何使用 Export-Csv 将 powershell 的 hashtable 导出为 CSV 文件?

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

我想将其放入 CSV 文件中,其中每个键值对都在新行中。第一列应该始终是键,下一列应该是值。

像这样:

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

非常感谢。

【问题讨论】:

    标签: powershell export hashtable export-to-csv


    【解决方案1】:

    试试这样的:

    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",
    

    【讨论】:

      【解决方案2】:

      一种方式:

       $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
      

      【讨论】:

      • 我认为这不会处理值中的特殊字符。例如,如果逗号出现在您的某个值中,则需要用引号引起来。
      • 十年过去了,这篇文章仍然有用!我特别为如何将 key.name 和值放入同一行而苦苦挣扎。我将连接分隔符更改为(Get-Culture).TextInfo.ListSeparator
      猜你喜欢
      • 2020-05-13
      • 2018-01-22
      • 2019-02-04
      • 2013-02-05
      • 2011-10-24
      • 2018-09-16
      • 1970-01-01
      • 2021-05-29
      • 2020-01-24
      相关资源
      最近更新 更多