如何在 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
}
}
我想比较虚拟机 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
}
}