我在使用Export-Csv工作时遇到了一些困难。我正在创建一个像这样的数组......
[pscustomobject] @{
Servername = $_.Servername
Name = $_.Servername
Blk = ""
Blk2 = ""
Method = "RDP"
Port = "3389"
}
我遇到的问题是当我尝试将其导出为CSV时,我会看到像这样的垃圾......
" 9e210fe47d09416682b841769c78b8a3" ,,,,,
我已阅读了大量有关此问题的文章,但我不了解如何正确获取数据。
答案 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-List
,Format-Table
和Format-Wide
cmdlet在PowerShell中是特殊的,因为它们意味着使用管道,并将其转换为在控制台中显示。因此,您无法从FL
,FT
或FW
进入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