powershell - 如何找到哪个嵌套循环是优秀的
问题描述
我感到震惊,我无法弄清楚哪个循环可以完成这项工作。简而言之,我有一个数组,我在其中对每个项目执行一项活动,并且运行时间是意外的,所以我不想等待所有项目完成,我只想等到两个项目完成然后继续下一步然后当另外两个项目可用时再次返回,依此类推......直到原始数组完成。
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 = @()
}
}
解决方案
如果我理解这个问题,您想一次在两台服务器上执行复制操作,完成后在这两台服务器上执行下一步。
然后迭代在接下来的两台服务器上执行相同的操作(如果阵列中只剩下一台服务器,则更少)
如果是这种情况,您可以执行一个简单的编号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”上触发后续步骤
推荐阅读
- c - 当函数没有显式返回值时会发生什么?无法弄清楚代码的输出是如何来的
- node.js - Discord.js:为什么“awaitMessages”在事件中不起作用:“准备好”?
- r - 如何使用 ggpairs 获得 R^2?
- javascript - React 中三元运算符样式的 null 或 undefined
- c# - 随机 ConfigurationBuilder 行为
- apache-kafka - 运行多个 Kafka 控制台消费者的最佳方式?
- neovim - 如何将错误从 Neovim LSP 发送到 ALE
- mysql - MySQL从一个表中选择一个值,并根据第一个表中的值对另一个表的值求和
- angular - 如何避免多次 API 调用
- r - 在 R 中识别两个字符串中的模式