如何在 Power 中编写嵌套循环 shell

How to write Nested Loop in Power shell

我想比较虚拟机 ProvisionedSpaceGB 与数据存储 FreespaceGB 如果 ProvisionedSpaceGB 小于可用数据存储 space,则它应该 space 可用,否则 space 不可用。

我的以下代码对单个虚拟机按预期工作,但我想对多个虚拟机执行此操作。

#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 中为以下代码编写嵌套循环。 我上面的代码对于单个 VM 工作正常,但对于多个 VM 看起来它只接受一个条件不起作用。

$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"
}

实际上,您不需要嵌套循环...有点晚了,如果我没记错的话,您可以尝试以下操作:

$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
    }

}