$user = "test" $pass = "test" $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $credential = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $user, $secpasswd $baseUrl = "https://test.cloudapp.azure.com" function Get-RootWebStatus($baseUrl) { $KeepLooking = $true # Should we continue to retry? $counter = 1 # How many times we've tried $RetryLimit = 5 # Max number of retries $SleepInterval = 5 # How long to sleep between retries $StartTime = Get-Date # When we started while ($KeepLooking) { write-output "$(Get-Date -format 'g') - Querying $baseUrl to see if available." try { $response = Invoke-WebRequest $baseUrl write-output "$(Get-Date -format 'g') - Web request status: $($Response.Statuscode)" if ($Response.Statuscode -eq 200) { write-output "$(Get-Date -format 'g') - Web site is alive!" # track execution time: $timeTaken = Measure-Command -Expression { $site = Invoke-WebRequest -Uri $baseUrl} $milliseconds = $timeTaken.TotalMilliseconds $milliseconds = [Math]::Round($milliseconds, 1) "This took $milliseconds ms to execute" $KeepLooking = $false continue } } catch { write-output "$(Get-Date -format 'g') - Error! $($_.Exception.Message)" } $counter++ | Out-Null if ($counter -gt $RetryLimit) { write-output "$(Get-Date -format 'g') - RetryLimit exceeded. Giving up.." $KeepLooking = $false continue } start-sleep $SleepInterval } write-output "$(Get-Date -format 'g') - Execution time was $((New-TimeSpan -start $StartTime -end (Get-Date)).seconds) seconds" } Get-RootWebStatus $baseUrl # Base Url status is completed, Once it is passed, it should check for the login credentials. $suburl = Get-Content -Raw -Path "C:\pipelinetask\suburl.json" | ConvertFrom-Json $Loginpage = $baseUrl+$suburl.Login.url Write-Host "Login page Url is $Loginpage" $params = @{uri = $Loginpage; Method = 'POST'; #(or POST, or whatever) Headers = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($user):$($secpasswd)")); } #end headers hash table } #end $params hash table $Login = Invoke-RestMethod @params -SessionVariable lp $LoginPage = Invoke-WebRequest @params -WebSession $lp -Body $Login -ContentType "application/json" $LoginPage #Write-Host "Authentication Done"$suburl = Get-Content -Raw -Path "C:\pipelinetask\suburl.json" | ConvertFrom-Json function Get-SubUrlResponse($hostUri, $Relativeurl) { $requestUri = $hostUri+$Relativeurl $attempts = 5 $SleepInterval = 5 for ($i = 1; $i -le $attempts; $i++) { try { $reply = Invoke-WebRequest -Uri $requestUri -WebSession $lp -Body $Login Write-Host "$($i) attempt = Request $($requestUri) " if ($reply.StatusCode -eq 200) { Write-Host "$($i) attempt = Request StatusCode: $($reply.StatusCode), done!" -ForegroundColor DarkGreen break; # track execution time: $timeTaken = Measure-Command -Expression { $site = Invoke-WebRequest -Uri $requestUri} $milliseconds = $timeTaken.TotalMilliseconds $milliseconds = [Math]::Round($milliseconds, 1) "This took $milliseconds ms to execute" } else { Write-Host "$($i) attempt = Request StatusCode: $($reply.StatusCode), :-( " -ForegroundColor DarkYellow } } catch { $attempts = $i # preserve the number of tries Write-Host "Error: $($_.Exception)" -ForegroundColor Red } Write-Host "waiting $($SleepInterval) sec till next attempt." Start-Sleep -Seconds $SleepInterval } } foreach ($url in $suburl.urls) { $resultVar = Get-SubUrlResponse $baseUrl $url.url } t