Public/Wait-WebResource.ps1

function Wait-WebResource {
  <#
    .SYNOPSIS
    Wait until a web resource is accessible

    .DESCRIPTION
    Queries a web resource and returns the status of the request

    .PARAMETER URI
    The URI parameter corresponds to the Unified Resource Identifier (URI) of the web resource.

    .PARAMETER TimeOut
    The optional time-out parameter corresponds to the wait period after which the resource is declared unreachable.

    .PARAMETER RetryInterval
    The optional retry interval parameter is the interval in millisecond in between each queries to check the availability of the web resource.

    .NOTES
    File name: Wait-WebResource.ps1
    Author: Florian Carrier
    Creation date: 21/10/2019
    Last modified: 20/12/2019
  #>

  Param(
    [Parameter (
      Position    = 1,
      Mandatory   = $true,
      HelpMessage = "URI of the web resource"
    )]
    [ValidateNotNullOrEmpty ()]
    [String]
    $URI,
    [Parameter (
      Position    = 2,
      Mandatory   = $false,
      HelpMessage = "Time in seconds before time-out"
    )]
    [ValidateNotNullOrEmpty ()]
    [Int]
    $TimeOut = 60,
    [Parameter (
      Position    = 3,
      Mandatory   = $false,
      HelpMessage = "Interval in between retries"
    )]
    [ValidateNotNullOrEmpty ()]
    [Int]
    $RetryInterval = 1
  )
  Begin {
    # Get global preference variables
    Get-CallerPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState
  }
  Process {
    # Wait for web-server to come back up
    $Timer = [System.Diagnostics.Stopwatch]::StartNew()
    while (($Timer.Elapsed.TotalSeconds -lt $TimeOut) -And (-Not (Test-HTTPStatus -URI $URI))) {
      Start-Sleep -Seconds $RetryInterval
      Write-Log -Type "DEBUG" -Object "Waiting for $URI to be available"
    }
    $Timer.Stop()
    # Check state
    if (($Timer.Elapsed.TotalSeconds -gt $TimeOut) -And (-Not (Test-HTTPStatus -System $WebServer))) {
      # Timeout
      return $false
    } else {
       return $true
     }
  }
}