Powershell:导出 csv 文件中的 System.Object[]
Powershell: System.Object[] in export-csv file
我写了这个脚本来生成一个 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 数据磁盘大小在文件中存储了一个以上的数据(可以有多个磁盘),因此它们显示为 System.Object[]
。如何强制 powershell 将这些数据连接成一个字符串?
我尝试在第 9 行的 $tmpObj
之后和最后一行的 $vmoutput
之后添加 -join
参数,但没有令人满意的结果。
尝试将分层数据转换为结构化数据总是很棘手。像这样的东西应该真的有效:
$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
我写了这个脚本来生成一个 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 数据磁盘大小在文件中存储了一个以上的数据(可以有多个磁盘),因此它们显示为 System.Object[]
。如何强制 powershell 将这些数据连接成一个字符串?
我尝试在第 9 行的 $tmpObj
之后和最后一行的 $vmoutput
之后添加 -join
参数,但没有令人满意的结果。
尝试将分层数据转换为结构化数据总是很棘手。像这样的东西应该真的有效:
$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