Powershell System.Array to CSV文件

时间:2014-06-19 16:09:02

标签: powershell csv

我在使用Export-Csv工作时遇到了一些困难。我正在创建一个像这样的数组......

[pscustomobject] @{
    Servername = $_.Servername
    Name = $_.Servername
    Blk = ""
    Blk2 = ""
    Method = "RDP"
    Port = "3389"
}

我遇到的问题是当我尝试将其导出为CSV时,我会看到像这样的垃圾......

  

" 9e210fe47d09416682b841769c78b8a3" ,,,,,

我已阅读了大量有关此问题的文章,但我不了解如何正确获取数据。

3 个答案:

答案 0 :(得分:8)

为了进行测试,我使用/服务器名称构建了一个CSV文件,并将其读入,以下内容适用于PS4:

$serverList = import-csv "datafile.csv"

$AllObjects = @()

$serverList | ForEach-Object {
    $AllObjects += [pscustomobject]@{
        Servername = $_.Servername
        Name = $_.Servername
        Blk = ""
        Blk2 = ""
        Method = "RDP"
        Port = "3389"
    }
}

$AllObjects | Export-Csv -Path "outfile.csv" -NoTypeInformation

答案 1 :(得分:2)

当您尝试从任何Format-*命令中输出时,会发生这种情况。

Format-ListFormat-TableFormat-Wide cmdlet在PowerShell中是特殊的,因为它们意味着使用管道,并将其转换为在控制台中显示。因此,您无法从FLFTFW进入Export-csv。正如Don Jones所说"格式在右边"。

不相信我?观察,当我运行Get-Process时,通过Format-Table发送,然后转换为Csv。

gps | ft | ConvertTo-Csv
#TYPE Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
"ClassId2e4f51ef21dd47e99d3c952918aff9cd","pageHeaderEntry","pageFooterEntry","autosizeInfo","shapeInfo","groupingEntry"
"033ecb2bc07a4d43b5ef94ed5a35d280",,,,"Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo",
"9e210fe47d09416682b841769c78b8a3",,,,,
"27c87ef9bbda4f709f6b4002fa4af63c",,,,,
"27c87ef9bbda4f709f6b4002fa4af63c",,,,,
"27c87ef9bbda4f709f6b4002fa4af63c",,,,,

它甚至是相同的字符串!为什么我们得到这个字符串?我真的希望我知道,但我认为它与Format-*命令将对象转换为文本指令以便在控制台中显示的方式有关。

如果您真的喜欢Format-Table看起来的方式,请将其发送到Out-File,这是重定向Format-*命令输出的唯一方法。

另一个消息是使用Tee-Object将管道的副本转储到变量,然后将其发送到Export。

Get-Process | Tee-Object -Variable ExportMe | Format-Table
$exportMe | export-Csv .\Export.csv

我称之为“拥有你的蛋糕并且吃得太过分了。”

答案 2 :(得分:1)

使用Select-Object来防止错误的CSV导出。

示例:

Get-Services | Select-Object * | export-csv -Path C:\log.csv