【问题标题】:Powershell: System.Object[] in export-csv filePowershell:导出 csv 文件中的 System.Object[]
【发布时间】:2018-12-08 11:47:35
【问题描述】:

我写了这个脚本来生成一个 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 将此数据加入单个字符串?

我尝试在最后一行$vmoutput之后的第9行广告$tmpObj之后添加-join参数,但没有令人满意的结果。

【问题讨论】:

    标签: powershell azure csv export export-csv


    【解决方案1】:

    尝试将分层数据转换为结构化数据总是很棘手。这样的事情实际上应该有效:

    $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
    

    我只是无法测试 - 抱歉。

    【讨论】:

      【解决方案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 | Out-String
          }
      }
      $vmOutput | export-csv C:\Users\***\data.csv -delimiter ";" -force -notypeinformation
      

      【讨论】:

      • 并非如此,因为这仅显示了第一个值,删除了其他值。
      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 2014-05-19
      • 2016-04-20
      • 2023-03-05
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多