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)
5 = Not configured yet. 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:
- isTerminalServer
- isTerminalServerAlternate
Option Explicit Dim strOS strOS = GetOSFamily() If isTerminalServer(strOS) Then wscript.echo "This is a Terminal Server" Else wscript.echo "This is not a Terminal Server" End If If ucase(strOS) = "W2K3" Then If isTerminalServerAlternate Then wscript.echo "This is a Terminal Server" Else wscript.echo "This is not a Terminal Server" End If End If WScript.Quit(0) Function GetOSFamily() Dim strComputer, oWMIService, colOSInfo, oOSProperty, strCaption, strOSFamily strComputer = "." Set oWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colOSInfo = oWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each oOSProperty in colOSInfo strCaption = oOSProperty.Caption Next If InStr(1,strCaption, "2008", vbTextCompare) Then strOSFamily = "W2K8" If InStr(1,strCaption, "2003", vbTextCompare) Then strOSFamily = "W2K3" GetOSFamily = strOSFamily Set oWMIService = Nothing Set colOSInfo = Nothing End Function Function isTerminalServer(strOS) Dim strComputer, strNameSpace, objWMIService, colItems, objItem strComputer = "." If ucase(strOS) = "W2K3" Then strNameSpace = "\root\cimv2" Else strNameSpace = "\root\cimv2\TerminalServices" End If Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & strNameSpace) Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_TerminalServiceSetting") For Each objItem in colItems Select Case objItem.LicensingType Case "1" ' Remote Administration isTerminalServer = False Case "2" ' Per Device isTerminalServer = True Case "4" ' Per User isTerminalServer = True Case "5" ' Not configured yet 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