我有一个 PowerCLI 脚本,可以关闭 VM,更改其内存和 CPU,然后重新打开它。我已经修改了脚本以利用变量。这一切都完美无缺。
我现在正在尝试修改脚本以利用数组,以便在众多虚拟机之间循环。关闭和打开 VM 的脚本部分运行良好。
我遇到的问题是在 foreach 循环中使用来自两个数组的变量。
对于 $vm_name 中的每个 VM,我需要设置在 $memory_gb 中找到的相应内存量。
这就是我所拥有的(它目前为所有 VM 设置了相同的内存量(“1”))...
$vm_name = @("OMAC-SBXWIN7AJM", "OMAC-SBXWIN2012R2AJM", "OMAC-SBXWIN2008R2AJM")
$memory_gb = 2,4,4
# SET THE VM MEMORY
Write-Host 'NOW SETTING THE VM MEMORY'
foreach ($objItem in $vm_name)
{Set-VM -VM $vm_name -MemoryGB 1 -confirm:$false
Break
}
http://i.stack.imgur.com/E9hfY.png
...我试过在第一个循环中嵌套第二个 foreach 循环,但无济于事。
如何编写脚本以使 $vm_name 中的每个 VM 获得 $memory_gb 中找到的相应内存量?
最佳答案
您可以使用 Zip 功能:
function Zip($a1, $a2) {
while ($a1) {
$x, $a1 = $a1
$y, $a2 = $a2
[tuple]::Create($x, $y)
}
}
用法:
zip 'a','b','c' 1,2,3 |% {$_.item1 + $_.item2}
结果:
a1
b2
c3
关于arrays - PowerShell/CLI : "Foreach" loop with multiple arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191803/