Functions/Azure/Confirm-AzHostPool.ps1

function Confirm-AzHostPool {
    <#
    .SYNOPSIS
        Tests for the existence of a HostPool in Azure.

    .DESCRIPTION
        The Confirm-AzHostPool function takes the name of an Azure HostPool as input and returns $true if it is found,
        otherwise returns $false.

    .PARAMETER HostPoolName
        The name of the HostPool to look for.

    .PARAMETER ResourceGroupName
        The name of the Resource Group that the HostPool is supposed to be in.

    .PARAMETER Location
        Optional. The location of the HostPool. If provided, the function will look for the HostPool in the specified
        location.

    .PARAMETER HostPoolType
        Optional. The type of HostPool to look for. If provided, the function will look for the HostPool with the specified
        type.

    .PARAMETER LoadBalancerType
        Optional. The type of Load Balancer to look for. If provided, the function will look for the HostPool with the
        specified Load Balancer type.

    .PARAMETER MaxSessionLimit
        Optional. The maximum number of sessions allowed in the HostPool. If provided, the function will check that the
        HostPool has the same MaxSessionLimit.

    .PARAMETER PreferredAppGroupType
        Optional. The preferred App Group type for the HostPool. If provided, the function will check that the HostPool has
        the same PreferredAppGroupType.

    .EXAMPLE
        # Check if a HostPool named "MyHostPool01" exists in the resource group "MyResourceGroup01"
        Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01"

    .EXAMPLE
        # Check if a HostPool named "MyHostPool01" exists in the resource group "MyResourceGroup01" and store the result in
        # a variable.
        $exists = Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01"
        if ($exists) {
            Write-Output "MyHostPool01 exists in the MyResourceGroup01 Resource Group."
        } else {
            Write-Output "MyHostPool01 does not exist in the MyResourceGroup01 Resource Group."
        }

    .EXAMPLE
        # Check with a specific location
        Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01" -Location "eastus"

    .EXAMPLE
        # Check with a specific HostPoolType
        Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01" -HostPoolType "Pooled"

    .EXAMPLE
        # Check with a specific LoadBalancerType
        Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01" `
            -LoadBalancerType "BreadthFirst"

    .EXAMPLE
        # Check with a specific MaxSessionLimit
        Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01" -MaxSessionLimit 10

    .EXAMPLE
        # Check with a specific PreferredAppGroupType
        Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01" `
            -PreferredAppGroupType "Desktop"

    .EXAMPLE
        # How to use this in a Pester test
        Describe "MyHostPool01 Host Pool" {
            It "Should exist in the MyResourceGroup01 Resource Group" {
                Confirm-AzHostPool -HostPoolName "MyHostPool01" -ResourceGroupName "MyResourceGroup01" | Should -Be $true
            }
        }

    .NOTES
        Author: Doug Seelinger
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [string]$HostPoolName,
        [Parameter(Mandatory=$true)]
        [string]$ResourceGroupName,
        [Parameter(Mandatory=$false)]
        [string]$Location,
        [Parameter(Mandatory=$false)]
        [string]$HostPoolType,
        [Parameter(Mandatory=$false)]
        [string]$LoadBalancerType,
        [Parameter(Mandatory=$false)]
        [int]$MaxSessionLimit,
        [Parameter(Mandatory=$false)]
        [string]$PreferredAppGroupType
    )

    # Confirm HostPool exists, checking for optional parameters as well
    $hostPool = Get-AzWvdHostPool -ResourceGroupName $ResourceGroupName -Name $HostPoolName -ErrorAction SilentlyContinue
    if ($null -eq $hostPool) {
        return $false
    }
    # Check for optional parameters
    if ($Location -and $hostPool.Location -ne $Location) {
        return $false
    }
    if ($HostPoolType -and $hostPool.HostPoolType -ne $HostPoolType) {
        return $false
    }
    if ($LoadBalancerType -and $hostPool.LoadBalancerType -ne $LoadBalancerType) {
        return $false
    }
    if ($MaxSessionLimit -and $hostPool.MaxSessionLimit -ne $MaxSessionLimit) {
        return $false
    }
    if ($PreferredAppGroupType -and $hostPool.PreferredAppGroupType -ne $PreferredAppGroupType) {
        return $false
    }
    return $true
}