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

鲁佩什·科拉特瓦尔

我想将虚拟机ProvisionedSpaceGB与数据存储区FreespaceGB进行比较,如果ProvisionedSpaceGB小于数据存储区的可用空间,则它应该是可用空间,否则空间不可用。

我的以下代码可以在单个虚拟机上正常运行,但是我想在多个VM上执行此操作。

#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"
}
伊凡·米切夫(Ivan Mirchev)

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

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

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章