Here is a VBScript which can be used to get the following information from a W2K, W2K3, W2K8 or W2K8R2 server via WMI:
- is Remote Desktop enabled?
- is Terminal Services / Remote Desktop Services configured for Application Server or Remote Administration?
- what TS/RDS license servers have been defined?
- what TS license servers have been discovered? (no longer applies after W2K8)

Please forgive the appearance if the blog layout wraps the lines, and hopefully HTML encoding won’t make a mess of the code – the script has only had basic testing so let me know if there’s any mistakes in it.

The reasons for the complexity of the script:
- the registry location of the information changes between versions of Windows
- settings can be defined locally or via group policy, the latter taking precedence
- LS checks are done only if the server is in Application Server mode
- “discovered” LS servers are only sought if the NT version is 5.0, 5.2 or 6.0

It has been designed to query just one server at a time and output a readable summary of what it finds – it would be trivial to call the script repeatedly with a different server name to build an inventory and pipe the information where you desire.

'-------------------------------------------------------------------------------
' THIS SCRIPT IS PROVIDED "AS-IS" AND DOES NOT COME WITH SUPPORT FROM MICROSOFT
'
' CheckTS.vbs
'
' Syntax:
' CSCRIPT /NoLogo CheckTS.vbs [/S:servername]
'
' Example:
' CSCRIPT /NoLogo CheckTS.vbs /S:FOO > FOO.TXT
' (Reports on remote server "FOO" and pipe the output to FOO.TXT)
'
' If no server name is specified, localhost is used
'-------------------------------------------------------------------------------
Option Explicit

Const HKEY_LOCAL_MACHINE = &H80000002

Dim strComputer, strKey, strValue, strOutput
Dim objReg

If WScript.Arguments.Named.Exists("S") Then
  strComputer=UCase(WScript.Arguments.Named.Item("S"))
Else
  strComputer = "localhost"
End If

On Error Resume Next
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
                        strComputer & "\root\default:StdRegProv")
If Err.Number <> 0 Then
' Gracefully handle a failure to connect to the remote machine
  WScript.Echo "There was a problem connecting to " & strComputer & vbCrLf &_
               "Error " & Err.Number & " " & Err.Description
  WScript.Quit
End If
On Error Goto 0

strOutput = "Checking server: " & strComputer & vbCrLf

'-------------------------------------------------------------------------------
' Retrieve the Windows version from the remote machine,
' as we need to know which registry keys we are to check
'-------------------------------------------------------
Dim strWindowsVersion

strValue = "CurrentVersion"
strKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
objReg.GetSTRINGValue HKEY_LOCAL_MACHINE,strKey,strValue,strWindowsVersion

strOutput = strOutput & "OS Version: " & strWindowsVersion
If strWindowsVersion = "5.0" Then
  strOutput = strOutput & " (Windows 2000)"
End If
If strWindowsVersion = "5.2" Then
  strOutput = strOutput & " (Windows Server 2003)"
End If
If strWindowsVersion = "6.0" Then
  strOutput = strOutput & " (Windows Server 2008)"
End If
If strWindowsVersion = "6.1" Then
  strOutput = strOutput & " (Windows Server 2008R2)"
End If
strOutput = strOutput & vbCrLf

'-------------------------------------------------------------------------------
' Is the server accepting Remote Desktop Connections?
' (fDenyTSConnections = 0)
'----------------------------------------------------
Dim iRDDisabledLOCAL, iRDDisabledPOLICY

strValue = "fDenyTSConnections"
strKey = "SYSTEM\CurrentControlSet\Control\Terminal Server"
iRDDisabledLOCAL = 1
If ExistsDWORD Then
  objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKey,strValue,iRDDisabledLOCAL
End If

strKey = "SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"
iRdDisabledPOLICY = -1
If ExistsDWORD Then
  objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKey,strValue,iRDDisabledPOLICY
End If

If iRDDisabledPOLICY <> -1 Then
' Setting is defined in a policy
  If iRDDisabledPOLICY = 1 Then
    strOutput = strOutput & "Remote Desktop is DISABLED (via policy)" & vbCrLf
  Else
    strOutput = strOutput & "Remote Desktop is ENABLED (via policy)" & vbCrLf
  End If
Else
' Setting is not defined in a policy (so local or default setting applies)
  If iRDDisabledLOCAL = 1 Then
    strOutput = strOutput & "Remote Desktop is DISABLED (locally)" & vbCrLf
  Else
    strOutput = strOutput & "Remote Desktop is ENABLED (locally)" & vbCrLf
  End If
End If

'-------------------------------------------------------------------------------
' Is the server running in Application Server mode?
' (TSAppCompat = 1)
'--------------------------------------------------
Dim iTSAppCompat

strValue = "TSAppCompat"
strKey = "SYSTEM\CurrentControlSet\Control\Terminal Server"
iTSAppCompat = -1
If ExistsDWORD Then
  objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKey,strValue,iTSAppCompat
End If

If iTSAppCompat = 1 Then
  strOutput = strOutput & "Terminal Services is in APPLICATION SERVER mode" & vbCrLf
Else
  strOutput = strOutput & "Terminal Services is in REMOTE ADMINISTRATION mode" & vbCrLf
End If

'-------------------------------------------------------------------------------
' If the server is running in Application Server mode, check the licensing mode
' (LicensingMode = 2 for per-device, 4 for per-user)
'------------------------------------------------------------------------------
Dim iLicensingModeLOCAL, iLicensingModePOLICY

If iTSAppCompat = 1 Then
  strValue = "LicensingMode"
  strKey = "SYSTEM\CurrentControlSet\Control\Terminal Server"
  If (strWindowsVersion = "6.0"  Or strWindowsVersion = "6.1") Then
    strKey = "SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\Licensing Core"
  End If
  If ExistsDWORD Then
    objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKey,strValue,iLicensingModeLOCAL
  End If

  strKey = "SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"
  iLicensingModePOLICY = -1
  If ExistsDWORD Then
    objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKey,strValue,iLicensingModePOLICY
  End If

  If iLicensingModePOLICY <> -1 Then
  ' Setting is defined in a policy
    If iLicensingModePOLICY = 2 Then
      strOutput = strOutput & "Licensing Mode is configured as PER DEVICE (via policy)" & vbCrLf
    ElseIf iLicensingModePOLICY = 4 Then
      strOutput = strOutput & "Licensing Mode is configured as PER USER (via policy)" & vbCrLf
    Else
      strOutput = strOutput & "Licensing Mode is NOT RECOGNIZED (via policy) : " & iLicensingModePOLICY & vbCrLf
    End If
  Else
  ' Setting is not defined in a policy (so local or default setting applies)
    If iLicensingModeLOCAL = 2 Then
      strOutput = strOutput & "Licensing Mode is configured as PER DEVICE (locally)" & vbCrLf
    ElseIf iLicensingModeLOCAL = 4 Then
      strOutput = strOutput & "Licensing Mode is configured as PER USER (locally)" & vbCrLf
    Else
      strOutput = strOutput & "Licensing Mode is NOT RECOGNIZED (locally) : " & iLicensingModeLOCAL & vbCrLf
    End If
  End If
End If

'-------------------------------------------------------------------------------
' If the server is running in Application Server mode, check the LS list
' (LicenseServers = a comma-separated list of license servers)
'-----------------------------------------------------------------------
Dim strLicenseServers

If iTSAppCompat = 1 Then
  strValue = "LicenseServers"
  strKey = "SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"

  If ExistsSTRING Then
    objReg.GetSTRINGValue HKEY_LOCAL_MACHINE,strKey,strValue,strLicenseServers
    strOutput = strOutput & "License servers defined by policy: " & strLicenseServers & vbCrLf
  End If

  Dim arrLSKeys

  strKey = "SYSTEM\CurrentControlSet\Services\TermService\Parameters\LicenseServers"
  If objReg.EnumKey(HKEY_LOCAL_MACHINE,strKey,arrLSKeys) = 0 Then
  ' Key does not exist by default, so if we failed to open it then we skip this
    If IsArray(arrLSKeys) Then
      Dim i, strName

      strOutput = strOutput & "License servers defined locally: "
      i = 0
      For Each strName In arrLSKeys
        If i > 0 Then
          strOutput = strOutput & ","
        End If
        strOutput = strOutput & strName
        i = i + 1
      Next
      strOutput = strOutput & " (" & i & ")" & vbCrLf
    End If
  End If

  If strWindowsVersion = "5.0" Or strWindowsVersion = "5.2" Or strWindowsVersion = "6.0" Then
  ' Discovery of License Servers is only available before W2K8R2
    strKey = "SOFTWARE\Microsoft\MSLicensing\Parameters"
    If strWindowsVersion = "6.0" Then
      strKey = "SYSTEM\CurrentControlSet\Control\Terminal Server\RCM"
    End If

    strValue = "DomainLicenseServerMulti"
    If ExistsMULTISTRING Then
      Dim arrLSNames, strList

      objReg.GetMULTISTRINGValue HKEY_LOCAL_MACHINE,strKey,strValue,arrLSNames
      i = 0
      For Each strName In arrLSNames
      ' Build the list of names separated with commas, ignoring null strings
        If strName <> "" Then
          If i > 0 Then
            strList = strList & ","
          End If
          strList = strList & strName
          i = i + 1
        End If
      Next
      If i > 0 Then
        strOutput = strOutput & "License servers discovered in DOMAIN/WORKGROUP role: " &_
                    strList & " (" & i & ")" & vbCrLf
      End If
    End If

    strValue = "EnterpriseServerMulti"
    If ExistsMULTISTRING Then
      objReg.GetMULTISTRINGValue HKEY_LOCAL_MACHINE,strKey,strValue,arrLSNames
      i = 0
      strList = ""
      For Each strName In arrLSNames
      ' Build the list of names separated with commas, ignoring null strings
        If strName <> "" Then
          If i > 0 Then
            strList = strList & ","
          End If
          strList = strList & strName
          i = i + 1
        End If
      Next
      If i > 0 Then
        strOutput = strOutput & "License servers discovered in ENTERPRISE role: " &_
                    strList & " (" & i & ")" & vbCrLf
      End If
    End If
  End If
End If

'-------------------------------------------------------------------------------
' Output the results to STDOUT (can be piped to a file)
'------------------------------------------------------

WScript.Echo strOutput
WScript.Quit


'===============================================================================
' FUNCTIONS
' As some registry values/keys are optional, these functions allow us to only
' bother trying to read their contents if we have verified they exist...
'===============================================================================

Function ExistsDWORD
  Dim DUMMY
  If objReg.GetDWORDValue(HKEY_LOCAL_MACHINE,strKey,strValue,DUMMY) <> 0 Then
    ExistsDWORD = FALSE
  Else
    ExistsDWORD = TRUE
  End If
End Function

Function ExistsSTRING
  Dim DUMMY
  If objReg.GetSTRINGValue(HKEY_LOCAL_MACHINE,strKey,strValue,DUMMY) <> 0 Then
    ExistsSTRING = FALSE
  Else
    ExistsSTRING = TRUE
  End If
End Function

Function ExistsMULTISTRING
  Dim DUMMY
  If objReg.GetMULTISTRINGValue(HKEY_LOCAL_MACHINE,strKey,strValue,DUMMY) <> 0 Then
    ExistsMULTISTRING = FALSE
  Else
    ExistsMULTISTRING = TRUE
  End If
End Function