继续脚本回到while循环的开头

时间:2016-11-09 21:04:36

标签: powershell infinite-loop

我试图编写一个小实用程序来测试与某些服务器的连接,并在有几秒钟的数据包丢失时做其他事情。

然而,一旦完成,我希望它继续测试连接,依此类推,而不会退出脚本。主要是我这样做是为了在将来为我们的日常任务创建类似样式的脚本。

到目前为止,我已经提出了一些相关的变化,但我似乎无法得到它。到目前为止,我已经开始创建一个函数。

function ServerUp {
    while (Test-Connection -Cn $Server -BufferSize 16 -Count 4 -ea 0) {
        "Server is up"
    }
}
}

function ServerDown {
    while (!(Test-Connection -Cn $Server -BufferSize 16 -Count 4 -ea 0)) {
        "Connection to server went down"
    }
    {
    }
}

$Server = Read-Host -Prompt 'Input your server  name'

ServerUp 
ServerDown

我已经使用了很多不同的变体(例如在while循环之后创建一个if语句,以便在while循环不再为真时执行某些操作等。) ,但每次它似乎退出脚本。

在做了一些研究之后,似乎继续可能是实现这一目标的方法,但我似乎无法使其正常工作。

如果没有某种" goto"这是否可行? (根据我的理解,这不在PowerShell中。)

2 个答案:

答案 0 :(得分:1)

  

如果没有某种“goto”(据我所知,这在powershell中并不存在),这是否可行。

它不在PowerShell中,这是一种耻辱。正是出于这个原因 - 没有一个循环显然说“永远循环”。只有方法可以将扳手塞入现有的环中,以便将它们打开并保持打开状态,这样它们就永远不会退出。

while ($true) { 
    #code here
}


do {
    # code here
} while ($true)


do {
    # code here
} until ($false)


for () {
    # code here
}

continue在这里没用 - 它是为了跳过循环块的其余部分,然后继续下一个项目。

答案 1 :(得分:1)

为什么不将两个检查合并为一个函数,然后将其放入循环中?

function Test-ServerConnection {
    if(Test-Connection -Cn $Server -BufferSize 16 -Count 4 -ea 0){
        "Server is up"
    } else {
        "Server is down"
    }
}

while($true){
    Test-ServerConnection
}