在 powershell 脚本中使用时间进行条件循环
Using time in a powershell script for conditional loop
这是我的代码:
#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)"
}
我想在 while 循环中设置一个条件,如果它已经 运行 比方说 2 小时,那么它应该退出。似乎无法找到如何启动计时器并在 powershell 中保留它的记录。
在这个例子中,我所做的只是在你的 While 循环之前添加一行,它还会检查以确保在 While 循环期间还没有过去 2 个小时。
根据您希望 break
退出流程的时间,这可能是最佳选择,因为它不会在您达到整整 2 小时后立即再次开始新的循环,并且循环将重新启动。
#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)"
}
这是我的代码:
#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)"
}
我想在 while 循环中设置一个条件,如果它已经 运行 比方说 2 小时,那么它应该退出。似乎无法找到如何启动计时器并在 powershell 中保留它的记录。
在这个例子中,我所做的只是在你的 While 循环之前添加一行,它还会检查以确保在 While 循环期间还没有过去 2 个小时。
根据您希望 break
退出流程的时间,这可能是最佳选择,因为它不会在您达到整整 2 小时后立即再次开始新的循环,并且循环将重新启动。
#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)"
}