我需要获取按 provisionedspace 排序的VM列表,而且这些VM不应具有 RawPhysical 。我已经尝试了以下代码
Get-Datastore -Name "$DSName" | Get-VMHost | get-vm | Select-Object -Property Name, Provisionedspacegb | sort -Property Provisionedspacegb | select -First 3 | Select Name
以上用于按 provisionedspacegb
进行VM列表排序的方法Get-Datastore -Name "$DSName" | Get-VMHost | Get-VM | Get-HardDisk | Where-Object {$_.DiskType -eq "RawPhysical" } | Select Parent
上面的用于获取没有物理磁盘
的VM列表我需要在单行powershell代码中使用这两个代码。
答案 0 :(得分:1)
每当与许多管道运营商合作时,请退后一步,考虑采用除法和权衡法。也就是说,将脚本分成更多易于管理的部分。我没有可用的VMWare,但是请尝试以下想法:
# Get a list of all the VMs
$allVms= Get-Datastore -Name "$DSName" | Get-VMHost | get-vm
# Array for those we actually want
$rawVms = @()
# Iterate the VM collection. Look for such VMs that have whatever disk config
foreach($vm in $allVms) {
# This filtering statement is likely to be incorrect. Tune accordingly
if($vm | get-harddisk | ? { $_.DiskType -eq "RawPhysical" }).Count -gt 0 {
# If the VM has raw disk, add it into desired VMs list
$rawVms += $vm
}
}
# Do stuff to the filtered collection
$rawVms | Select-Object -Property Name, Provisionedspacegb | ` # ` = line break for readability
sort -Property Provisionedspacegb | select -First 3 | Select Name
实际语法可能会有所不同。