Private/Get-VMEnhancedSessionModeState.ps1

function Get-VMEnhancedSessionModeState
{
    [CmdletBinding()]
    param (
        [Parameter(Mandatory, Position = 0)]
        $Id,

        [Parameter(Mandatory, Position = 1)]
        [System.String]$VMServerName
    )

    # EnhancedSessionModeState return values:
    # (0) Virtual Machine not found.
    # - Zero isn't one of the values returned by EnhancedSessionModeState, but if the Get-CimInstance command fails it will return $null (which gets cast to a UInt16 value of 0).
    # (2) Allowed and available.
    # (3) Not allowed.
    # (6) Allowed but not available.
    [System.UInt16]$enhancedSessionResult = 0
    $cimSessionParam = $null

    if (Test-Connection -ComputerName $VMServerName -Quiet -Count 1)
    {
        try
        {
            # Casting to a [string] because the -Id argument can be a [string] or a [guid].
            [System.String]$vmId = $Id

            $cimSessionParam = @{
                ComputerName = $VMServerName
                ErrorAction = 'Stop'
                SessionOption = New-CimSessionOption -Protocol Wsman
                SkipTestConnection = $true
                Verbose = $false
            }

            $cimSession = New-CimSession @cimSessionParam
        }
        catch
        {
            try
            {
                # Try DCOM if WSMan protocol fails.
                $cimSessionParam.SessionOption = New-CimSessionOption -Protocol Dcom
                $cimSession = New-CimSession @cimSessionParam
            } #try
            catch
            {
                $PSCmdlet.WriteError($_)
                Write-Output $enhancedSessionResult
                return
            } #Inner catch
        } #Outer catch

        try
        {
            $params = @{
                CimSession = $cimSession
                ClassName = 'Msvm_ComputerSystem'
                ErrorAction = 'SilentlyContinue'
                Filter = "Name = '$vmId'"
                NameSpace = 'ROOT/virtualization/v2'
                Property = 'EnhancedSessionModeState'
                Verbose = $false
            }

            [System.UInt16]$enhancedSessionResult = (Get-CimInstance @params).EnhancedSessionModeState

        } #try
        catch
        {
            $PSCmdlet.WriteError($_)
        } #catch
        finally
        {
            if ($null -ne $cimSession)
            {
                Remove-CimSession -CimSession $cimSession -Confirm:$false
            }
        } #finally
    } #if can connect to $VMServerName.

    Write-Output $enhancedSessionResult
} #function Get-VMEnhancedSessionModeState