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
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 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 |