2016-11-03 14 views
0

私はpowershellで新しく、コードを終了するためにいくつかの助けが必要です。すべてが大丈夫ですが、私はELSEでループが必要です。どうすればこの問題を解決できますか?Powershell Do Loop

DO { 
     $getinfo=Get-Content $wblogpath | Select-Object -last 1 
     Write-Host -NoNewline "."$counter 
     Start-Sleep -s 1 
     $counter++ 
    } 
    WHILE ($getinfo -notlike '*ReadyToRun->Run*' -and 
     $getinfo -notlike '*test*' -and 
     $getinfo -notlike '*error*' -and 
     $counter -le 8) 

    IF ($getinfo -like '*ReadyToRun->Run*') 
     { 
     Write-Host "`nREADY TO RUN" 
     } 
    ELSEIF ($getinfo -like '*test*') 
     { 
     Write-Host "`ntest" 
     } 
    ELSEIF ($getinfo -like '*error*') 
     { 
     Write-Host "`nerror" 
     } 
    ELSE{ 
     Write-Host "`nRESTARTing WINBASIS" 
     $counter=0 
     } 

感謝:)再帰的な方法で

+1

短い回答:不可能です。 Powershellはvbsのように行間をジャンプすることはできません。 do-while-expressionであなたのニーズを満たす方法を見つけなければなりません。 – restless1987

+1

[スクリプト内の特定の箇所にジャンプする]の可能な複製(0120-17753) – TessellatingHeckler

答えて

1

 function myfunction() 
    { 
    DO { 
      $wblogpath="C:\temp\test.csv" 
      $getinfo=Get-Content $wblogpath | Select-Object -last 1 
      Write-Host -NoNewline "."$counter 
      Start-Sleep -s 1 
      $counter++ 
      } 
     WHILE ($getinfo -notlike '*ReadyToRun->Run*' -and 
       $getinfo -notlike '*test*' -and 
       $getinfo -notlike '*error*' -and 
       $counter -le 8) 

     IF ($getinfo -like '*ReadyToRun->Run*') 
      { 
      Write-Host "`nREADY TO RUN" 
      } 
     ELSEIF ($getinfo -like '*test*') 
      { 
      Write-Host "`ntest" 
      } 
     ELSEIF ($getinfo -like '*error*') 
      { 
      Write-Host "`nerror" 
      } 
     ELSE{ 
      Write-Host "`nRESTARTing WINBASIS" 
      $counter=0 
      myfunction 
      } 
    } 

    myfunction 
+1

再帰の使用は賢明です。スタックがあまりにも深くならないようにする必要があり、どれくらい深いのか分かりません。 –

+2

[見た目のように](http://stackoverflow.com/questions/10755699/how-can-i-configure-call-depth-in-powershell)PSv3以降では動的なコール深度の制限がありますが、テールをサポートしていませんコールの最適化(少なくともPSv4はありません)。私のコンピュータ上の簡単なテストでは、5kコール後に「コール深度オーバーフロー」例外が発生するため、この回答はいつかはルーピングとブレークを停止します。 – TessellatingHeckler

+0

が働いた:D助けてくれてありがとうm8 – emnt

1

は、単に別のループ内のすべてのコードをラップします。

DO { 

    #your code here# 

} WHILE ($true)