Как получить виртуальную машину, у которой нет физического диска Raw, и отсортировать эти виртуальные машины по имени Provedspace? - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно получить список виртуальных машин, который должен быть отсортирован по provisionedspace , а также те виртуальные машины не должны иметь RawPhysical . Я попробовал следующий код

 Get-Datastore -Name "$DSName" |  Get-VMHost | get-vm | Select-Object -Property  Name, Provisionedspacegb | sort -Property Provisionedspacegb | select -First 3 | Select Name

Выше, что используется для сортировки списка виртуальных машин по provisionedspacegb

Get-Datastore -Name "$DSName" | Get-VMHost | Get-VM | Get-HardDisk | Where-Object {$_.DiskType -eq "RawPhysical" } | Select Parent

Вышеуказанный код используется для получения списка виртуальных машин, у которого нет Физический диск

Мне нужны эти два кода в однострочном коде powershell ..

1 Ответ

0 голосов
/ 31 октября 2018

Всякий раз, когда вы работаете с большим количеством операторов трубопровода, сделайте шаг назад и подумайте: «разделяй и властвуй». То есть разбить скрипт на более управляемые части. У меня нет 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

Фактический синтаксис, скорее всего, будет немного другим.

...