Powershell:打破两个或多个循环

Powershell: break from two or more loops

我有一个脚本可以 ping 系统直到它终止。主代码块是一个函数,它有一个嵌套在 do until 循环中的 foreach 循环。

## Start
function start-skript{
    Write-Output 'Ping läuft...'
    $Repetition_Counter = 0
    #Start loop
    do {
        #Host loop
        foreach($system in $Hosts_Array) {
            #Ping Function
            Ping-Host -HostToPing $system
            #Write-Host 'Sleep for' $Pause 'sekunde'
            Start-Sleep -Seconds $Pause
        } $Repetition_Counter ++
    } until($Repetition_Counter -eq $Repetition -or (stop-script))
}

start-skript

它运行良好。但是,通过调用 stop-script 函数,只有在 $Hosts_Array 中的所有设备都应用了 ping-host 函数后,才能停止脚本。我希望能够通过调用停止脚本函数来停止脚本,即使函数 Ping-host 尚未应用于 $Hosts_Array 数组中的所有设备。我想,我可以像下面那样做

## Start
function start-skript{
    Write-Output 'Ping läuft...'
    $Repetition_Counter = 0
    #Start loop
    do {
        #Host loop
        foreach($system in $Hosts_Array) {
            #Ping Function
            Ping-Host -HostToPing $system
            #Write-Host 'Sleep for' $Pause 'sekunde'
            **stop-script**  ## I've just added the function here
            Start-Sleep -Seconds $Pause
        } $Repetition_Counter ++
    } until($Repetition_Counter -eq $Repetition -or (stop-script))
}

start-skript

我没有锻炼。它刚从 foreach 循环中出来,但随后又从 foreach 循环开始,bcz foreach 循环进入了 do until 循环。 有什么建议吗??

使用语句标签:

:outer
do
{
  :inner
  foreach($i in 1..10){
    if($i -eq 2){
      continue inner
    }
    if($i -gt 5){
      break outer
    }

    $i
  }
}while($true)

输出将是:

1
3
4
5

因为我们 continue$i -eq 2 上进行了内循环并在 $i -eq 5

之后跳出了外循环