我对多值属性以及如何将它们导出为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
这可能吗?