Экспорт-CSV форматирование. Powershell

Давайте начнем с того, что я совершенно новичок в Powershell и не самый лучший, работающий с его кодом и скриптами, но пытающийся учиться. А теперь к проблеме!

Я работаю над сценарием, который получает информацию с компьютеров в сети. У меня есть код, который работает довольно хорошо для моих целей. Но у меня возникли некоторые проблемы, когда речь заходит о некоторой информации, в основном информации, содержащей несколько объектов, таких как сервис.

#This application will pull information from a list of devices. The devices list is
sent with C:\Users\test.txt and output is pushed to a file C:\Users\devices.csv


function kopiera
{
param
(
    [Parameter(ValueFromPipeline=$true)]
    [string[]]$Computer=$env:computername
)    
Process
{
    $computer | ForEach-Object{

        $service=Get-WmiObject -Class Win32_Service -Computername $_


        $prop= [ordered]@{
                    Service =$service.caption 
                }
        New-Object PSCustomObject -Property   $prop
    }
}
}

Get-Content C:\Users\test.txt | kopiera | Export-csv c:\Users\devices.csv

Когда я экспортирую CSV-файл, он выглядит так:

ТИП System.Management.Automation.PSCustomObject

"Обслуживание"

"System.Object []"

Так что он не получает service.caption (потому что их слишком много?). Но если я заменю файл export-csv C:\Users\device.csv на файл C:\Users\devices.txt, он будет выглядеть следующим образом:

{Служба обновления Adobe Acrobat, Служба обновления Adobe Flash Player, Служба фильтров Andrea ADI, Опыт работы с приложениями...}

Так что он начинает выглядеть лучше, но не получает их всех (все же потому, что слишком много служб?). Что я хотел бы сделать с этим файлом экспорта / вывода, так это чтобы информация отображалась вертикально, а не горизонтально.

(Требуемый результат)

Сервис Adobe Acrobat

Служба обновления Adobe Flash Player

и так далее..

вместо: (фактический результат)

Служба обновления Adobe Acrobat, Служба обновления Adobe Flash Player и т. Д.

Есть ли способ сделать это возможным, пытался некоторое время и не могу обернуть мой мозг вокруг этого.

Любая помощь приветствуется!

1 ответ

Решение

CSV обычно не является хорошим выбором для экспорта объектов, которые содержат многозначные или сложные свойства. Свойства объекта будут преобразованы в одно строковое значение. Единственный способ сохранить массив значений - преобразовать его в строку с разделителями.

$prop= [ordered]@{
                  Service =($service.caption) -join ';'
                 }

создаст строку, разделенную точкой с запятой, и вам придется иметь дело с разбиением ее в любом приложении, которое использует csv позже.

Если вы хотите сохранить и повторно импортировать исходный объект со свойством в виде массива, вы можете переключиться на Export-CLIXML вместо Export-CSV.

Другие вопросы по тегам