You're resetting $counter to 1 as part of the do/while loop. It will always be less than 6.
You can't reference $Response.Statuscode if you set $Response to an exception value in your catch statements.
I don't understand what you are trying to do on the first 5 loops.
I simplified your code. See if this works.
Set-StrictMode -Version Latest
$user = "test"
$pass = "test"
$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!"
$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