Если объект, который вы экспортируете как CSV с Export-Csv
или ConvertTo-Csv
, имеет значения свойств, которые содержат коллекцию (массив) значений, эти значения stringifiedчерез их .ToString()
метод , который приводит к бесполезному представлению, как в случае вашего массива .IPV4Addresses
свойство.
Чтобы продемонстрировать это с помощью командлета ConvertTo-Csv
(который работает аналогичнов Export-Csv
, но возвращает данные CSV вместо сохранения их в файл):
PS> [pscustomobject] @{ col1 = 1; col2 = 2, 3 } | ConvertTo-Csv
"col1","col2"
"1","System.Object[]"
То есть массив 2, 3
, сохраненный в свойстве .col2
, былбесполезно строковое значение System.Object[]
, которое вы получаете, когда вызываете .ToString()
в обычном массиве PowerShell;другие типы коллекций .NET - такие как [System.Collections.Generic.List[string]]
в вашем случае - аналогично;то есть по их имени типа .
Предполагается, что вы хотите представить все значения свойства со значением массива в одном CSV-столбце, чтобы исправитьэта проблема , вы должны принять решение о значимом строковом представлении для коллекции в целом и реализовать его, используя Select-Object
с вычисленным свойством :
Например, вы можете использовать оператор -join
для создания разделенного пробелами списка элементов:
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'
.