当屏幕上的数据正常时,在 CSV 文件导出中获取 "System.Collections.Generic.List`1[System.String]"
Getting "System.Collections.Generic.List`1[System.String]" in CSV File export when data is okay on screen
我是 PowerShell 的新手,正在尝试从 Hyper-V 中获取 VM 名称列表及其关联的 IP 地址。
我在屏幕上得到的信息很好,但是当我尝试导出到 csv 时,我得到的 IP 地址在每一行上都是 "System.Collections.Generic.List`1[System.String]"。
有关于 "joins" 或 "ConvertTo-CSV" 的建议,但我不明白这些的语法。
有人可以帮忙吗?
这是我使用的语法...
Get-VM | Select -ExpandProperty VirtualNetworkAdapters | select name, IPV4Addresses | Export-Csv -Path "c:\Temp\VMIPs.csv"
如果您使用 Export-Csv
或 ConvertTo-Csv
导出为 CSV 的对象具有 属性 值,其中包含 集合 (array) 的值,这些值通过它们的 .ToString()
方法 被 字符串化,这导致无用的表示,就像你的数组值的情况一样.IPV4Addresses
属性.
使用 ConvertTo-Csv
cmdlet 进行演示(其工作方式类似于 Export-Csv
,但 returns CSV 数据而不是保存它到文件):
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | ConvertTo-Csv
"col1","col2"
"1","System.Object[]"
也就是说,存储在 .col2
属性 中的数组 2, 3
被毫无帮助地字符串化为 System.Object[]
,这就是您调用 [=14= 时得到的结果] 在常规 PowerShell 数组上;其他 .NET 集合类型 - 例如 [System.Collections.Generic.List[string]]
在你的情况下 - 类似地进行字符串化;也就是说,根据他们的类型名称。
假设您想要在 单个 CSV 列中表示数组值 属性 的所有值,要解决此问题 您必须 为整个集合决定一个有意义的字符串表示并使用Select-Object
和[=51来实现它=]:
例如,您可以使用 -join
运算符创建一个 space 分隔的元素列表:
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } |
Select-Object col1, @{ n='col2'; e={ $_.col2 -join ' ' } } |
ConvertTo-Csv
"col1","col2"
"1","2 3"
注意数组 2, 3
是如何变成字符串 '2 3'
的。
OtherObjectPipedStuff | Select-对象名称,IPV4地址| export-csv PP.csv -NoTypeinformation
我是 PowerShell 的新手,正在尝试从 Hyper-V 中获取 VM 名称列表及其关联的 IP 地址。
我在屏幕上得到的信息很好,但是当我尝试导出到 csv 时,我得到的 IP 地址在每一行上都是 "System.Collections.Generic.List`1[System.String]"。
有关于 "joins" 或 "ConvertTo-CSV" 的建议,但我不明白这些的语法。
有人可以帮忙吗?
这是我使用的语法...
Get-VM | Select -ExpandProperty VirtualNetworkAdapters | select name, IPV4Addresses | Export-Csv -Path "c:\Temp\VMIPs.csv"
如果您使用 Export-Csv
或 ConvertTo-Csv
导出为 CSV 的对象具有 属性 值,其中包含 集合 (array) 的值,这些值通过它们的 .ToString()
方法 被 字符串化,这导致无用的表示,就像你的数组值的情况一样.IPV4Addresses
属性.
使用 ConvertTo-Csv
cmdlet 进行演示(其工作方式类似于 Export-Csv
,但 returns CSV 数据而不是保存它到文件):
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | ConvertTo-Csv
"col1","col2"
"1","System.Object[]"
也就是说,存储在 .col2
属性 中的数组 2, 3
被毫无帮助地字符串化为 System.Object[]
,这就是您调用 [=14= 时得到的结果] 在常规 PowerShell 数组上;其他 .NET 集合类型 - 例如 [System.Collections.Generic.List[string]]
在你的情况下 - 类似地进行字符串化;也就是说,根据他们的类型名称。
假设您想要在 单个 CSV 列中表示数组值 属性 的所有值,要解决此问题 您必须 为整个集合决定一个有意义的字符串表示并使用Select-Object
和
例如,您可以使用 -join
运算符创建一个 space 分隔的元素列表:
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } |
Select-Object col1, @{ n='col2'; e={ $_.col2 -join ' ' } } |
ConvertTo-Csv
"col1","col2"
"1","2 3"
注意数组 2, 3
是如何变成字符串 '2 3'
的。
OtherObjectPipedStuff | Select-对象名称,IPV4地址| export-csv PP.csv -NoTypeinformation