2016-05-12 3 views
1

Hier ist mein Code:Unter Verwendung der Zeit in einem Powershell-Skript für die bedingte Schleife

 #make sure deployment is in running state 
$deployment = Get-AzureDeployment -servicename $_serviceName -slot $_slotName 
Write-Host "$_serviceName is in state $($deployment.status)" 
while ($deployment.Status -ne "running") 
{ 
    Write-Host "wait 5 seconds before trying again" 
    Start-Sleep -s 5 
    $deployment = Get-AzureDeployment -servicename $_serviceName -slot $_slotName 
    Write-Host "$_serviceName is in state $($deployment.status)"   
} 

Ich möchte eine Bedingung in der while-Schleife setzen, wenn es für worden läuft 2 Stunden sagen läßt, dann sollte es beenden. Ich kann nicht herausfinden, wie man einen Timer startet und es in der Powershell speichert.

+0

Sie sollten einen Blick auf 'stopwatch' werfen und eine zusätzliche Bedingung über' && 'zu Ihrer' while' Schleife hinzufügen. – gravity

Antwort

1

In diesem Beispiel habe ich lediglich vor Ihrer While-Schleife eine Zeile hinzugefügt, die ebenfalls überprüft, ob 2 Stunden in der While-Schleife noch nicht vergangen sind.

Je nachdem, wann Sie break aus dem Prozess möchten, ist dies möglicherweise die beste Option, da es keine neue Schleife erneut starten wird, sobald Sie volle 2 Stunden schlagen, und die Schleife ist geplant Neustart.

#make sure deployment is in running state 
$deployment = Get-AzureDeployment -servicename $_serviceName -slot $_slotName 
Write-Host "$_serviceName is in state $($deployment.status)" 
$StopWatch = [System.Diagnostics.Stopwatch]::StartNew() #new code 
while (($deployment.Status -ne "running") -and ($StopWatch.Elapsed.Hours -lt 2)) #new code 
{ 
    Write-Host "wait 5 seconds before trying again" 
    Start-Sleep -s 5 
    $deployment = Get-AzureDeployment -servicename $_serviceName -slot $_slotName 
    Write-Host "$_serviceName is in state $($deployment.status)"   
} 
Verwandte Themen