Powershell Export-CSV игнорирует не общие свойства объектов, как мне обойти это?

Я правильно сохраняю, используя Export-CSV в powershell 2, но я хочу, чтобы он включал все, я хочу пустые значения, если он пуст.

$list | Export-Csv -Path (Get-SaveFile) -NoTypeInformation;

Документация для экспорта-CSV:

Когда вы отправляете несколько объектов в Export-CSV, Export-CSV упорядочивает файл на основе свойств первого отправляемого объекта. Если остальные объекты не имеют одного из указанных свойств, значение свойства этого объекта равно null, что представляется двумя последовательными запятыми. Если остальные объекты имеют дополнительные свойства, значения этих свойств не включаются в файл.

Я не могу просто организовать список, потому что есть две вещи, которые могут иметь 0 или более значений. К некоторым объектам есть комментарии, к некоторым есть ссылки, к некоторым и то, и другое. Но мне нужен 1 столбец на ссылку и 1 столбец на комментарий, независимо от того, сколько их или ни одного.

Есть ли другой командлет, который реализует этот стиль export-csv, при котором никакие поля не игнорируются?

Изменить с ответом: этот фрагмент PowerShell от iRon был именно тем, что мне нужно, чтобы переопределить усечение свойства Export-CSV. https://powersnippets.com/union-object/ Спасибо за помощь!


person Michael Ellis    schedule 08.06.2018    source источник
comment
Похоже, вам, возможно, придется создать собственный фрагмент кода, чтобы справиться с этим. Export-CSV, вероятно, оптимизирован для запуска только одного прохода данных. Чтобы обрабатывать данные по-разному, вы можете запустить цикл, используя ForEach ($item in $list) {}, и обращаться к свойствам каждого объекта, используя условия.   -  person mjsqu    schedule 08.06.2018


Ответы (1)


Если вам известны конкретные свойства, которые вы хотите использовать в файле CSV, вы можете вставить командлет Select-Object в конвейер следующим образом:

$list | Select-Object prop1, prop2, prop3 | Export-Csv -Path (Get-SaveFile) -NoTypeInfo

Если вы не знаете конкретные свойства, вы можете просмотреть список, чтобы создать список свойств. Каждый объект предоставляет свойство с именем PSObject, которое содержит другое свойство с именем Properties. Вы можете просмотреть список, получить имена свойств каждого объекта в списке, а затем завершить его вызовом Select-Object -Unique, чтобы получить хороший список имен свойств без дубликатов.

$propList = $list | ForEach-Object {
        $_.PSObject.Properties | Select-Object -ExpandProperty Name
    } | Select-Object -Unique

$list | Select-Object $propList | Export-Csv -Path (Get-SaveFile) -NoTypeInformation
person JamesQMurphy    schedule 08.06.2018
comment
Отличный способ собрать все имена свойств. Я получаю сообщение об ошибке Select-Object : Cannot convert System.Management.Automation.PSObject to one of the following types, поэтому я просто использую список свойств, чтобы создать фиктивный первый объект, чтобы переопределить усечение свойств Export-CSV. - person Michael Ellis; 08.06.2018