Jam*_*ter 6 arrays powershell vmware foreach powercli
我有一个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
}
Run Code Online (Sandbox Code Playgroud)
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)
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
zip 'a','b','c' 1,2,3 |% {$_.item1 + $_.item2}
Run Code Online (Sandbox Code Playgroud)
结果:
a1
b2
c3
Run Code Online (Sandbox Code Playgroud)
您有2个选择。首先(不是我建议的)是一个For()循环。它会像这样:
For($I=0;$I -lt $vm_name.count;$I++){
Set-VM -VM $vm_name[$I] -MemoryGB $memory_gb[$I] -confirm:$false
}
Run Code Online (Sandbox Code Playgroud)
更好的方法是将其放在带有CSV标题的CSV中,VMName, Memory
然后列出每个VM和所需的内存。然后运行类似:
Import-CSV C:\Path\To\File.CSV | ForEach{Set-VM -VM $_.VMName -MemoryGB $_.memory -confirm:$false}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23326 次 |
最近记录: |