VmWare和Powershell多值属性

时间:2016-01-25 17:09:04

标签: csv powershell

我对多值属性以及如何将它们导出为csv有疑问。 虽然我知道如何使用多值属性,但我正在编写这个脚本。 以下是详细信息: 我必须导出一个包含VMName,HardDiskName,FileName等的csv文件。 起初我尝试了这种方法(1):

$hdd = Get-HardDisk -VM "vmname" -DiskType RawPhysical| select Parent, Name
$props = @{'VMName' = $hdd.parent
'HDDName' = $hdd.name

}
$obj = New-Object -TypeName PSObject -Property $props
#Write-Output $obj
$obj | Export-Csv vm.csv -NoTypeInformation

我很快意识到这种方法不起作用,因为我正在处理多值属性而我无法正确导出它们。 ......比我尝试过(方法2)

$hdd = Get-HardDisk -VM "vmname" -DiskType RawPhysical| select @{Name='VmName';Expression={[string]::join(“;”, ($_.parent))}}, @{Name='HDDName';Expression={[string]::join(“;”, ($_.name))}}
$props = @{'VMName' = $hdd.parent
'HDDName' = $hdd.name
}

$obj = New-Object -TypeName PSObject -Property $props
#Write-Output $obj
$obj | Export-Csv vm.csv -NoTypeInformation

有人说这不起作用。

有些属性不是多值的,我可以通过方法1得到它们,但我无法获得多值属性。

如果我这样做

$hdd = Get-HardDisk -VM svwdbn21 -DiskType RawPhysical| select @{Name='VmName';Expression={[string]::join(“;”, ($_.parent))}}, @{Name='HDDName';Expression={[string]::join(“;”, ($_.name))}},`
@{Name='FileName';Expression={[string]::join(“;”, ($_.filename))}}, @{Name='DeviceName';Expression={[string]::join(“;”, ($_.devicename))}},`
@{Name='CanonicalName';Expression={[string]::join(“;”, ($_.ScsiCanonicalName))}}| Export-csv test.csv

我可以得到几乎所有我需要的细节,除了LUN信息,我用下面的代码得到它:

$hdd = Get-HardDisk -VM "vmname" -DiskType RawPhysical| select parent, name, filename, devicename, ScsiCanonicalName
$Lun = Get-SCSILun $hdd.SCSICanonicalName -VMHost $vm.vmhost
$lunpaths=$lun|Get-ScsiLunPath
$luns = $lunpaths | select name, sanid, State, Preferred
$luns

......这里是我真正陷入困境的地方。 我需要一种方法在一个csv文件中组合所有多值属性和LUN信息,这些信息现在存储在$ luns中。

经过更多研究后,我想出了这个:

$vm = Get-VM "vnname"| select name,VMHost
      $hdd = Get-HardDisk -VM "vmname" -DiskType RawPhysical| select Parent, Name, Filename, SCSICanonicalName, DeviceName
      $Lun = Get-SCSILun $hdd.SCSICanonicalName -VMHost $vm.vmhost
      $lunpaths=$lun|Get-ScsiLunPath
      $luns = $lunpaths | select name, sanid, State, Preferred
      $luns

      $props = @{'VMName' = $hdd.parent -join ';'
                'HDDName' = $hdd.name -join ';'
                'FileName' = $hdd.filename -join ';'
                'DeviceName' = $hdd.devicename -join ':'
                'CanonicalName' = $hdd.scsicanonicalname -join';'
                'LunName' = $luns.name -join ';'
                'SANId' = $luns.sanid -join ';'
                'State' = $luns.sate -join ';'
                'Preferred' = $luns.preferred -join';'

                }
      $obj = New-Object -TypeName PSObject -Property $props
      #Write-Output $obj
      $obj | Export-Csv vm.csv -NoTypeInformation

虽然我得到了我需要的所有信息,但csv文件看起来像这样:

HardDisk LunName FileName

Hdd1;hdd2; lun1;lun2;lun3 filename1;filename2

但我真正想要的是这个

HardDisk LunName FileName

Hdd1 lun1 filename1

hdd2 lun2 filename2

hdd3 lun3 filename3

这可能吗?

0 个答案:

没有答案