首页 > 解决方案 > 如何找到哪个嵌套循环是优秀的

问题描述

我感到震惊,我无法弄清楚哪个循环可以完成这项工作。简而言之,我有一个数组,我在其中对每个项目执行一项活动,并且运行时间是意外的,所以我不想等待所有项目完成,我只想等到两个项目完成然后继续下一步然后当另外两个项目可用时再次返回,依此类推......直到原始数组完成。

edit1:修改了代码,现在需要进入最后一个循环,将数组清空并从头开始迭代

$server_array = @('server1','server2','server3','server4','server5','server6')
$confirmed_array = @()
Foreach($server in $server_array )
{
#do copy 
#perform copy code of a file on $server  (i knew this code ) 
}

#validate below until the $server array is null means all the transfers are done 
#reason i am using while is to make sure the below loop waits until the file is transferred and to all the servers.
$server_array_count = $server_array.Count
while($server_array_count -ne 0 ) {
Foreach($server in $server_array )
{
$confirm_copy = $true

#Takes unexpected time , so instead of waiting to complete for all the servers i want to check whenever the two servers are done i want to perform the next steps . 

#wait until file is transferred atleast for 2 servers 

if ($confirm_copy)
{
#file transferred 
#add to new array so that i can use next block 
$confirmed_array += $server
$server_array_count -= 1
}
else
{
Write-Host "progress"
}
#$confirmed_array
$confirmed_array_count = $confirmed_array.Count
$confirmed_array_count 
}
if($confirm_array_count -eq 2)
{
#do next steps 
Write-Host "trigger"
$confirmed_array = @()
}

}

标签: powershell

解决方案


如果我理解这个问题,您想一次在两台服务器上执行复制操作,完成后在这两台服务器上执行下一步。
然后迭代在接下来的两台服务器上执行相同的操作(如果阵列中只剩下一台服务器,则更少)

如果是这种情况,您可以执行一个简单的编号for循环,例如:

$server_array = 'server1','server2','server3','server4','server5','server6','server7'

for ($i = 0; $i -lt $server_array.Count; $i += 2) {
    # perform copy actions on two servers (if there are that many left)

    Write-Host "Copy to server '$($server_array[$i])'"
    # perform copy action
    if (($i + 1) -lt $server_array.Count) {
        Write-Host "Copy to server '$($server_array[$i + 1])'"
        # perform copy action
    }
    #do next steps  on two servers (if there are that many left)
    Write-Host "Trigger next steps on server '$($server_array[$i])'"
    # perform next step
    if (($i + 1) -lt $server_array.Count) {
        Write-Host "Trigger next steps on server '$($server_array[$i + 1])'"
        # perform next step
    }
}

输出:

复制到服务器“server1”
复制到服务器“server2”
在服务器“server1”上触发后续步骤
在服务器“server2”上触发后续步骤
复制到服务器“server3”
复制到服务器“server4”
在服务器“server3”上触发后续步骤
在服务器“server4”上触发后续步骤
复制到服务器“server5”
复制到服务器“server6”
在服务器“server5”上触发后续步骤
在服务器“server6”上触发后续步骤
复制到服务器“server7”
在服务器“server7”上触发后续步骤

推荐阅读