2016-11-09 59 views
0

我想写一个小的实用程序,将测试连接到一些服务器,并且当有几秒钟的数据包丢失做其他事情。继续脚本回while循环的开始

但是,一旦完成,我希望它继续测试连接性,等等,而无需退出脚本。首先,我将此作为一种学习练习,在将来为我们所做的一些日常任务创建类似风格的脚本。

到目前为止,我已经想出了一些这种变化,但我似乎无法得到它。到目前为止,我已经想出了创建一个函数。

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循环之后的语句做一些事情时,while环不再是真正的等),但每次似乎退出脚本。

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

这甚至可能没有某种“goto”(根据我的理解,它不在PowerShell中)。

+0

'for(){ServerUp; ServerDown}' – PetSerAl

+0

感谢您的信息,这也工作,但我结束了使用下面的帖子的信息。 – user7138090

回答

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 
} 
+0

对不起,对于最近的回复,这是最有用的答案,谢谢! – user7138090

1

这甚至可能没有某种“goto”(根据我的理解,它不在powershell中)。

它不在PowerShell中,这是一个耻辱。正是由于这个原因 - 没有明确指出“永远循环”的循环。只有方法可以将扳手卡入现有的环中,以便将它们保持打开状态,从而不会退出。

while ($true) { 
    #code here 
} 


do { 
    # code here 
} while ($true) 


do { 
    # code here 
} until ($false) 


for() { 
    # code here 
} 

continue是没有用在这里 - 它是跳过循环块的剩余部分,并移动到下一个项目。

+0

是否有任何语言具有无限循环的显式构造? AFAIK'while(true)'是大多数语言常用的表达方式。 –

+0

@AnsgarWiechers [Wikipedia说](https://en.wikipedia.org/wiki/Infinite_loop#Language_support)Ada,Fortran,Go和Ruby有 - 但只有Ada和Ruby对我有明确的意图。 [Rosettacode](https://www.rosettacode.org/wiki/Loops/Infinite)说4DOS批处理,AppleScript,AutoHotkey,Standard BASIC,Brat,CoffeeScript,Common Lisp,Haskell,Maple,Modula-2,Perl 6,PostScript ,R,Rust,VB.Net - 都具有不包含True条件的无限循环语法。有些具有我想象的PS可能具有的'loop {}'语法。 (以及任何带有'label start/goto start'的语言) – TessellatingHeckler