This morning, a workmate seeked my support regarding an issue that I wasn’t aware of: on a Windows Server 2008 R2 based RDS Host you can’t leverage the CLIENTNAME environment variable within a logon script. I stumbled upon a post regarding the same issue and decided to port their VBScript based solution to Windows PowerShell and here’s the result:

Get-RDSSessionId and Get-RDSClientName

PowerShell

1

2

3

4

5

6

7

8

9

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

80

81

82

83

84

85

86

87

88

89

90

91

92

93

<#

.SYNOPSIS

Returns the RDS session ID of a given user.

.DESCRIPTION

Leverages query.exe session in order to get the given user's session ID.

.EXAMPLE

Get-RDSSessionId

.EXAMPLE

Get-RDSSessionId -UserName johndoe

.OUTPUTS

System.String

#>

functionGet-RDSSessionId

{

[CmdletBinding()]

Param

(

# Identifies a user name (default: current user)

[Parameter(ValueFromPipeline=$true)]

[System.String]

$UserName=$env:USERNAME

)

$returnValue=$null

try

{

$ErrorActionPreference='Stop'

$output=query.exe session$UserName|

ForEach-Object{$_.Trim()-replace'\s+',','}|

ConvertFrom-Csv

$returnValue=$output.ID

}

catch

{

$_.Exception|Write-Error

}

New-Objectpsobject$returnValue

}

<#

.SYNOPSIS

Returns the RDS client name

.DESCRIPTION

Returns the value of HKCU:\Volatile Environment\<SessionID>\CLIENTNAME