Форматирование экспорта-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 на out-файл C: \ Users \ devices.txt, он будет выглядеть так:

{Adobe Acrobat Update Service, Adobe Flash Player Update Service, Andrea ADI Filters Service, Application Experience ...}

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

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

Служба Adobe Acrobat

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

и так далее..

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

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

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

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


person Azely    schedule 02.12.2013    source источник


Ответы (1)


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

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

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

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

person mjolinor    schedule 02.12.2013