functions/azure/Wait-BcAdminAzOperation.ps1
function Wait-BcAdminAzOperation { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$OperationUri, [string]$SuccessStatusDescription = 'Created', [int]$TimeoutSeconds = 3600, [int]$PollIntervalSeconds = 20 ) if (-not (Connect-ToAzure)) { Write-Warning "Not connected to Microsoft Azure! Plase run Connect-ToAzure first!" return $false } $startTime = Get-Date $headers = @{ Authorization = $BcAdminSession.AzureRequestHeaderAuthorization } while ($true) { try { $response = Invoke-WebRequest -Uri $OperationUri -Headers $headers -Method Get $StatusCode = $response.StatusCode $StatusDescription = $response.StatusDescription Write-Verbose "Waiting. StatusCode: $StatusCode - StatusDescription: $StatusDescription" # $statusCode = $response.StatusCode if ($StatusDescription -eq $SuccessStatusDescription) { Write-Verbose "Operation succeeded." return $true } elseif ($StatusDescription -eq 'OK') { Write-Warning "Operation did not start or failed!" return $false } try { $retryAfter = $response.Headers.'Retry-After'[0] if ($retryAfter) { if ($retryAfter -ne $PollIntervalSeconds) { Write-Verbose "New value for Retry-After: $retryAfter. Updating PollIntervalSeconds." $PollIntervalSeconds = [int]$retryAfter } } } catch { Write-Warning "Failed to read Retry-After from header!" } Write-Information "Status: $StatusCode $StatusDescription – warte $PollIntervalSeconds Sekunden..." } catch { Write-Warning "Fehler beim Abfragen des Status: $($_.Exception.Message)" return $false } if ((Get-Date) -gt $startTime.AddSeconds($TimeoutSeconds)) { Write-Warning "Wait timeout $TimeoutSeconds seconds!" return $false } Start-Sleep -Seconds $PollIntervalSeconds } } |