将Hashtable数据集合导出为CSV

时间:2013-05-06 21:04:03

标签: powershell-v2.0

我正在尝试将CS​​V集合哈希表项的名称/值对导出为CSV。我还没有找到代码的select-object部分的正确语法。我希望CSV文件为Url和所有者提供columes。谢谢你的帮助

[System.Collections.ArrayList]$collection = New-Object System.Collections.ArrayList($null)
$SiteInfo = @{};

$SiteInfo.Url = "http://some.url.com";
$SiteInfo.Owner = "Joe Smith";
$collection.Add($SiteInfo);

$SiteInfo.Url = "http://another.url.com";
$SiteInfo.Owner = "Sally Jones";
$collection.Add($SiteInfo);


$collection | foreach{
    $hashTableDate = $_;
    $hashTableDate | Select-Object -Property Url, Owner;
}| Export-Csv  "C:\UsageReport.csv" -NoTypeInformation -Encoding UTF8 -Delimiter '|'

# results: file is empty :(

1 个答案:

答案 0 :(得分:9)

转换为PSObject,然后导出为CSV

所有那些“foreach”的东西都没有必要。只需将您的哈希转换为PSObject然后导出!

此示例使用ArrayList存储HashTables,然后将该ArrayList导出为CSV。

[System.Collections.ArrayList]$collection = New-Object System.Collections.ArrayList($null)

$SiteInfo = @{}
$SiteInfo.Url = "http://some.url.com"
$SiteInfo.Owner = "Joe Smith"
$collection.Add((New-Object PSObject -Property $SiteInfo)) | Out-Null

$SiteInfo = @{}
$SiteInfo.Url = "http://another.url.com"
$SiteInfo.Owner = "Sally Jones"
$collection.Add((New-Object PSObject -Property $SiteInfo)) | Out-Null


$collection | Export-Csv  "UsageReport.csv" -NoTypeInformation -Encoding UTF8 -Delimiter '|'

不起作用的事情。

请注意,虽然此处有效:

$collection.Add((New-Object PSObject -Property $SiteInfo))

...这里有些东西不起作用:

  • 省略一组括号不起作用:

    $collection.Add(New-Object PSObject -Property $SiteInfo)
    
  • 省略-property参数标签将不起作用:

    $collection.Add((New-Object PSObject $SiteInfo))
    
  • 仅使用+=将无效:

    $collection += $SiteInfo
    

对于这些,您将在CSV文件中收到错误消息和/或奇怪的条目。

为什么“Out-Null”?

附加说明:运行时有效索引最高的$collection.Add() outputs the index。如果您不想要它,| Out-Null就会抛弃该数字。