Skip to content

Using WMI to detect if running on a Windows 2003 or 2008 Terminal Server

How can I detect if a Windows 2003/2008 server is configured for Remote Administration or running the Terminal Server role/service?

You can check the mode of the Windows Server 2003/2008 server using the TS WMI Provider’s Win32_TerminalServiceSetting LicensingType property:

0 = Personal Terminal Server – For Windows XP only

1 = Remote Desktop for Administration

2 = Per Device. Valid for application servers (true Terminal Servers)

4 = Per User. Valid for application servers (true Terminal Servers)

Alternatively, but not recommended moving forward, on a Windows 2003 server you can check the contents of the following registry DWORD value:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat

0 = Remote Administration

1 = Application Server mode

Note that this key only will let you see what mode the server is in. To determine the Licensing Type, you would also need to query the following regitry DWORD value:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Licensing Core\PolicyAcOn

2 = Per Device configuration

4 = Per User configuration

To demontrate this I have created two functions:

  1. isTerminalServer
  2. isTerminalServerAlternate
Option Explicit

If isTerminalServer Then
  wscript.echo "This is a Terminal Server"
Else
  wscript.echo "This is not a Terminal Server"
End If

If isTerminalServerAlternate Then
  wscript.echo "This is a Terminal Server"
Else
  wscript.echo "This is not a Terminal Server"
End If

WScript.Quit(0)

Function isTerminalServer
  Dim strComputer, objWMIService, colItems, objItem
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_TerminalServiceSetting")
  For Each objItem in colItems
    Select Case objItem.LicensingType
      Case "2"
        isTerminalServer = True
      Case "4"
        isTerminalServer = True
      Case Else
        isTerminalServer = False
    End Select
  Next
  Set objWMIService = Nothing
  Set colItems = Nothing
End Function

Function isTerminalServerAlternate
  Dim objShell, strValue, strValueData
  strValue = "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat"
  Set objShell = CreateObject("WScript.Shell")
  strValueData = objShell.RegRead(strValue)
  If strValueData = "1" Then
    isTerminalServerAlternate = True
  Else
    isTerminalServerAlternate = False
  End If
  Set objShell = Nothing
End Function

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*