Как написать Вложенный цикл в оболочке Power - PullRequest
0 голосов
/ 13 октября 2019

Я хочу сравнить виртуальную машину ProvisionedSpaceGB с хранилищем данных FreespaceGB, если ProvisionedSpaceGB меньше свободного места для хранилища данных, тогда это должно быть свободное место, иначе свободное место не доступно.

Мой код ниже работает, как и ожидалось, для одной виртуальной машиныно я хочу сделать это для нескольких виртуальных машин.

#will be printing datastore FreeSpace for respective vms 
$PrintDatastore_Fsize = Get-Vm -Name Terminal1 |
                        Get-Datastore |
                        select FreeSpaceGB

#will be printing  ProvisionedSpace respective vms 
$getvmspace = Get-Vm -Name Terminal1 |
              select ProvisionedSpaceGB

if (($PrintDatastore_Fsize).FreeSpaceGB -gt ($getvmspace).ProvisionedSpaceGB) {
    "Space is available"
} else {
    "space is not available"
}

Как написать вложенный цикл для приведенного ниже кода в PowerShell. Мой приведенный выше код работает нормально для одной виртуальной машины, но выглядит как для нескольких виртуальных машин, он не работает, принимая только одно условие.

$vmList = Get-Content "C:\Program Files (x86)\VMware\scripting\vmlist.txt"
foreach ($PrintDatastore_Fsize in $vmList) {
    Get-Vm -Name $PrintDatastore_Fsize |
        Get-Datastore |
        select FreeSpaceGB
}

foreach ($getvmspace in $vmList) {
    Get-Vm -Name $getvmspace |
        select ProvisionedSpaceGB
}

if (($PrintDatastore_Fsize).FreeSpaceGB -gt ($getvmspace).ProvisionedSpaceGB) {
    Write-Host "Space is available"
} else {
    Write-Host "space is not available"
}

1 Ответ

0 голосов
/ 13 октября 2019

На самом деле вам не нужен вложенный цикл ... Немного поздно, и если я не ошибаюсь, вы можете попробовать следующее:

$vmList = Get-Content "C:\Program Files (x86)\VMware\scripting\vmlist.txt"
foreach ($VMName in $vmList) {
    $VM = Get-Vm -Name $VMName
    $VMDataStore = $VM | Get-Datastore
    if ($VMDataStore.FreeSpaceGB -gt $VM.ProvisionedSpaceGB) {$SpaceAvailable = $true}
    else { $SpaceAvailable = $false}
    [PSCustomObject]@{
        VMName = $VMName
        ProvisionedSpace = $VM.ProvisionedSpaceGB
        FreeSpace = $VMDataStore.FreeSpaceGB
        SpaceAvailable = $SpaceAvailable
    }

}
...