Экспорт-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.