How about something like this instead?
$user = "testuser"
$pass = "testpwd"
$baseUrl = "https://test.westeurope.cloudapp.azure.com"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
$reply = Invoke-WebRequest -Uri $baseUrl -Method GET -Headers @{Authorization = $base64AuthInfo }
Write-Host "Login done"
$urlArray = Get-Content -Raw -Path "C:\pipelinetask\urltest1.json" | ConvertFrom-Json
function Get-UrlResponse($hostUri, $Relativeurl, $authHeader)
{
$requestUri = $hostUri+$Relativeurl
$attempts = 5
for ($i = 1; $i -le $attempts; $i++) {
try {
$reply = Invoke-WebRequest -Uri $requestUri -Method GET -Headers @{Authorization = "Basic $($authHeader)"} -ErrorAction STOP
Write-Host "$($i) attempt = Request $($requestUri) with $($timeoutSec) timeout"
if ($reply.StatusCode -eq 200)
{
Write-Host "$($i) attempt = Request StatusCode: $($reply.StatusCode), done!" -ForegroundColor DarkGreen
break;
}
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 $($intervalSec) sec till next attempt."
Start-Sleep -Seconds $intervalSec
}
if ($resultVar.Status -ne 200){
Write-Error "$requestUri warm-up Failed after $($attempts) attempts"
}
$reply # Write the reply to the success stream
}
foreach ($url in $urlArray.urls) {
$resultVar = Get-UrlResponse $baseUrl $url.url $base64AuthInfo
Write-Host $resultVar
Write-Host $url
}