Accéder aux propriétés Terminal Server par script

Il est souvent utile de de modifier les propriétés Terminal Server (Profil TS, HomeDrive…) d’un utilisateur dans Active Directory avec un VBS.

Les propriétés classiques d’un utilisateur AD peuvent être récupérées avec un script comme celui-ci :

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
    "Select cn, distinguishedName from 'LDAP://DC=societe,DC=com' " _
    & "Where objectClass='user'"
objCommand.Properties("Page Size") = 2000
objCommand.Properties("Searchscope") = 2 

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

'Pour chaque User :
Do Until objRecordSet.EOF
    Wscript.Echo "cn : " & objRecordSet.Fields("cn").Value
    objRecordSet.MoveNext
Loop

Le script ci-dessus permet de récupérer le Common Name de chaque utilisateur, et peut être modifié pour rechercher n’importe quelle propriétés, à l’exception, entre autres, des propriétés Terminal Server.



Ces propriétés (chemin du profil TS, HomeDrive, HomePath), sont bien visibles dans les attributs de l’utilisateur (via ADSIEdit par exemple), mais ne sont pas accessibles par les providers Active Directory natifs.

Pour pouvoir utiliser les propriétés TS, il faut d’abord enregistrer la dll tsuserex.dll, présente dans l’Admin Pack de Windows 2003 Server et nativement sous 2008, avec la commande suivante :

regsvr32.exe tsuserex.dll


Une fois la dll enregistrée, il devient possible d’accéder aux champs Terminal Server de la façon suivante :

'Pour chaque User :
Do Until objRecordSet.EOF
    Wscript.Echo " - Traitement de " & objRecordSet.Fields("cn").Value

    'Récupération de l'objet User
    Set objUser = GetObject _
        ("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

    'Récupération du TSProfilePath
    If (objUser.TerminalServicesProfilePath <> "") Then
        Wscript.Echo "    TSProfilePath: " _
            & objUser.TerminalServicesProfilePath
    End If

    objRecordSet.MoveNext
Loop



On peut également jouer avec les éléments suivants :

  • TerminalServicesProfilePath
  • TerminalServicesHomeDirectory
  • TerminalServicesHomeDrive
  • AllowLogon


Pour modifier une propriété, il faut utiliser la classe SetInfo, comme pour une propriété classique :

objUser.profilePath = "\\newserver\TSProfiles\user"
objUser.setinfo


Remarque :
Pour définir l’emplacement des profils TS dans un environnement Citrix, il est mieux d’utiliser une GPO, liée au niveau de l’OU contenant les serveurs Citrix, plutôt que les propriétés AD.

La policy Set path for TS Roaming Profiles, définissant le chemin TS, est située dans Local Computer Policy/Computer Configuration/Administrative Templates/Windows Components/Terminal Services.

Cette méthode permet de s’assurer que tous les utilisateurs disposent d’un chemin de profil identique pour la ferme, et offre également la possibilité de définir des profils différents sur chaque ferme.

par .

Laisser un commentaire

*