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 |