Powershell: System.Object[] в файле export-csv
Я написал этот скрипт для генерации CSV-файла:
$VMs = Get-AzureRmVM
$vmOutput = @()
$VMs | ForEach-Object {
$tmpObj = New-Object -TypeName PSObject
$tmpObj | Add-Member -MemberType Noteproperty -Name "VM Name" -Value $_.Name
$tmpObj | Add-Member -MemberType Noteproperty -Name "VM Type" -Value $_.StorageProfile.osDisk.osType
$tmpObj | Add-Member -MemberType Noteproperty -Name "VM Profile" -Value $_.HardwareProfile.VmSize
$tmpObj | Add-Member -MemberType Noteproperty -Name "VM OS Disk Size" -Value $_.StorageProfile.OsDisk.DiskSizeGB
$tmpObj | Add-Member -MemberType Noteproperty -Name "VM Data Disk Size" -Value $_.StorageProfile.DataDisks.DiskSizeGB
$vmOutput += $tmpObj
}
$vmOutput | export-csv C:\Users\***\data.csv -delimiter ";" -force -notypeinformation
Но так как в последнем столбце VM Data Disk Size хранится один или несколько данных (может быть несколько дисков) в файле, они представлены как System.Object[]
, Как заставить powershell объединить эти данные в одну строку?
Я пытался добавить -join
параметр после $tmpObj
в строке 9 объявления после $vmoutput
в последней строке, но не было удовлетворительных результатов.
2 ответа
Решение
Всегда сложно попытаться преобразовать иерархические данные в структурированные данные. Нечто подобное должно работать:
$VMs = Get-AzureRmVM
$vmOutput = $VMs | ForEach-Object {
[PSCustomObject]@{
"VM Name" = $_.Name
"VM Type" = $_.StorageProfile.osDisk.osType
"VM Profile" = $_.HardwareProfile.VmSize
"VM OS Disk Size" = $_.StorageProfile.OsDisk.DiskSizeGB
"VM Data Disk Size" = ($_.StorageProfile.DataDisks.DiskSizeGB) -join ','
}
}
$vmOutput | export-csv C:\Users\***\data.csv -delimiter ";" -force -notypeinformation
Я просто не могу проверить - извините.
Я тоже не могу проверить это, но может ли это работать?
$VMs = Get-AzureRmVM
$vmOutput = $VMs | ForEach-Object {
[PSCustomObject]@{
"VM Name" = $_.Name
"VM Type" = $_.StorageProfile.osDisk.osType
"VM Profile" = $_.HardwareProfile.VmSize
"VM OS Disk Size" = $_.StorageProfile.OsDisk.DiskSizeGB
"VM Data Disk Size" = $_.StorageProfile.DataDisks.DiskSizeGB | Out-String
}
}
$vmOutput | export-csv C:\Users\***\data.csv -delimiter ";" -force -notypeinformation