我在Azure中设置了一个虚拟机,并且需要并行地批量启动虚拟机。例如,我有100个虚拟机,我需要一批1-5个虚拟机,首先并行启动,然后从6-10开始,以此类推。我能够并行启动所有am -但我找不到在foreach语句中添加限制的方法
foreach ($vm in ($vms | Select-Object 5))
有什么建议可以让我这样做吗?
$vms = Get-azvm -ResourceGroupName "VmList"
#$jobs = @()
foreach ($vm in ($vms | Select-Object 5))
{
$params = @($vm.Name)
$job = Start-Job -ScriptBlock {
param($ComputerName)
start-Azvm -Name $ComputerName -ResourceGroupName "VmList"
} -ArgumentList $params
}
# Wait for it all to complete
Wait-Job -Job $job
# Getting the information back from the jobs
Get-Job | Receive-Job
发布于 2020-12-29 03:35:05
如果你想跟踪你自己,你可以在Select-Object
上使用splatting。从-Skip 0 -First 5
开始,递增skip,这样下一个循环将是-Skip 5 -First 5
,依此类推。
$vms = Get-azvm -ResourceGroupName "VmList"
$batch = @{
Skip = 0
First = 5
}
Do
{
foreach ($vm in ($vms | Select-Object @batch))
{
$params = @($vm.Name)
$job = Start-Job -ScriptBlock {
param($ComputerName)
start-Azvm -Name $ComputerName -ResourceGroupName "VmList"
} -ArgumentList $params
}
# Wait for it all to complete
Wait-Job -Job $job
# Getting the information back from the jobs
Get-Job | Receive-Job
$batch.Skip += 5
}
until($batch.skip -ge $vms.count)
https://stackoverflow.com/questions/65482606
复制相似问题