Private/Test-Parameters.ps1

# Will be called in VM
function Global:Test-Parameters {
    [CmdletBinding()]
    <#
    .SYNOPSIS
        ...
    .DESCRIPTION
        ...
    #>

    param(
        [Parameter(Mandatory = $true)]
        [string]
        $KeyVaultName,
        [Parameter(Mandatory = $true)]
        [string]
        $StorageAccountName
    )
    process {
        # Check KeyVault
        Write-CustomHost -Message "Checking if KeyVault name is still available..."
        $StatusCode = $null
        $uri = "https://$($KeyVaultName).vault.azure.net"
        try {
            $response = invoke-WebRequest -Uri $Uri -ErrorAction Stop
            $StatusCode = $Response.StatusCode
        } catch [System.Net.WebException] { 
            $StatusCode = $_.Exception.Response.StatusCode.value__    
        }
        if ($null -ne $StatusCode){
            throw "KeyVaultName $KeyVaultName is already in use."
        }
        # Check StorageAccount
        Write-CustomHost -Message "Checking if StorageAccount name is still available..."
        $StatusCode = $null
        $uri = "https://$($StorageAccountName).blob.core.windows.net/"
        try {
            $response = invoke-WebRequest -Uri $Uri -ErrorAction Stop
            $StatusCode = $Response.StatusCode
        } catch [System.Net.WebException] { 
            $StatusCode = $_.Exception.Response.StatusCode.value__    
        }
        if ($null -ne $StatusCode){
            throw "StorageAccount name $StorageAccountName is already in use."
        }
    }
}