当您尝试从任何 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
我称之为“吃蛋糕,也吃它”。