2016-11-09 6 views
0

私は、いくつかのサーバーへの接続をテストする小さなユーティリティを作成しようとしています。whileループの最初の部分にスクリプトを続行します。

しかし、これが完了したら、スクリプトを終了せずに接続をテストしてください。主に私たちが行っているいくつかの日常的な作業のために、今後同様のスタイルのスクリプトを作成するための学習練習としてこれをやっています。

これまでのところ、私はこれにいくつかのバリエーションを考え出しましたが、それを得ることはできません。これまで私は関数を作ることを思いついた。私は(whileループはもはや真などのときに何かをしないためにwhileループ後のif文を作成するなど)、このの異なるバリエーションがたくさんでプレイしましたが、毎回それはそう

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 

スクリプトを終了する。

調査をした後、これを継続する方法が継続しているように見えますが、正しく機能するようには見えません。

これは何らかの "goto"(私が理解する限りPowerShellにはない)なしでも可能ですか?

+0

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

+0

情報をありがとう、これも働いたが、私はそれのためのポストからの情報を使用して終了しました。 – user7138090

答えて

1

2つのチェックを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 says](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、標準BASIC、Brat、CoffeeScript、Common Lisp、Haskell、Maple、Modula-2、Perl 6、PostScript 、R、Rust、VB.Net - すべてTrue条件を含まない無限ループ構文を持っています。いくつかは、PSが持つことができると想像した 'loop {}'構文を持っています。 (そして、 'label start/goto start'のある言語) – TessellatingHeckler

関連する問題