Powershell System.Array to CSV文件

Ace*_*ity 3 csv powershell

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

[pscustomobject] @{
    Servername = $_.Servername
    Name = $_.Servername
    Blk = ""
    Blk2 = ""
    Method = "RDP"
    Port = "3389"
}
Run Code Online (Sandbox Code Playgroud)

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

"9e210fe47d09416682b841769c78b8a3" ,,,,,

我已经阅读了大量有关此问题的文章,但我只是不明白如何正确获取数据.

Hun*_*son 11

为了测试,我构建了一个带有服务器名的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
Run Code Online (Sandbox Code Playgroud)


小智 6

用于Select-Object防止 CSV 导出错误。

例子:

Get-Services | Select-Object * | export-csv -Path C:\log.csv
Run Code Online (Sandbox Code Playgroud)


Fox*_*loy 5

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

Format-List和cmdlet 在 PowerShell 中很特殊,因为它们旨在使用管道,并将其转换为在控制台中显示Format-TableFormat-Wide因此,您无法通过管道从FL或进入。正如唐琼斯所说“格式在右边”。FTFWExport-csv

不相信我?观察,当我运行时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",,,,,
Run Code Online (Sandbox Code Playgroud)

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

如果您真的很喜欢自己的Format-Table外观,请将其发送到Out-File,这是重定向命令输出的唯一方法Format-*

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

Get-Process | Tee-Object -Variable ExportMe | Format-Table
$exportMe | export-Csv .\Export.csv
Run Code Online (Sandbox Code Playgroud)

我称之为“鱼与熊掌兼得”的方法。