Archiv

Archive for the ‘Citrix’ Category

Benutzer auch nachträglich in viele Gruppen anhand eines Template Users einfügen

Januar 4, 2011 2 Kommentare

In Citrix oder Remotedesktopumgebung werden Berechtigungen auf verschiedene Programme mittels Gruppen geregelt. Wenn User nun mit einer solchen Lösung arbeiten müssen, müssen diese zumindest in die Standardgruppen hinzugefügt werden.  Bei neuen Usern geht das sehr einfach mit einem sogenannten Template User, der kopiert wird. Wenn man Glück hat, hat man ein Provisioning Tool im Einsatz und die Gruppenpflege wird sowieso durch die HR Abteilung erledigt.  Aber was tun, wenn man kein Provisioning Tool hat und immer wieder eine große Anzahl an Gruppen einem Benutzer zuweisen muss. Als Alternative oder Zusatz gibt es natürlich auch das AGDLP oder AGUDLP Konzept. Hierauf gehe ich in diesem Artikel aber nicht weiter ein.

Als erstes legen wir einen normalen Benutzer an und nennen diesen _Template. Der Unterstrich sorgt dafür, daß er ganz oben in der OU steht. Aus Sicherheitsgründen ist dieser User natürlich deaktiviert. Dieser User wird also mit allen notwendigen Gruppen und Profileinstellungen vorkonfiguriert.


Setzt man den Basisordner auf H: \\fileserver\home$\%username% so wird dies auch auf den durch das Template angelegten User kopiert, allerdings nicht das Remotedesktop Profil.

Um einen User anhand des Templates anzulegen wählt man einfach den Template User mit der Rechten Maustaste und klickt auf kopieren.


Nun Benutzernamen etc. eingeben, darauf achten, daß er auch aktiviert wird und schon hat man einen User mit kopierten Gruppenmitgliedschaften etc.

Das ganze funktioniert prima mit neuen Benutzern aber was ist mit bereits vorhandenen Benutzern?

Um zumindest die Gruppenmitgliedschaften zu kopieren, kann man DSGET mit DSMOD pipen.
Das sieht dann so aus:

Dsget user „CN=_TEMPLATE,OU=Citrix,DC=BARTH,DC=CLOUD“ -memberof|dsmod Group addmbr „CN=CN=Anne.Wandklatsch,OU=CITRIX,DC=BARTH,DC=CLOUD“ -addmbr

Nicht ganz so komfortabel aber seit W2003 problemlos möglich und immer noch besser als jede Gruppe manuell hinzuzufügen.

Schöner währe es im AD einen neuen Menüpunkt zu  haben, der diese Funktion anbietet, oder?

Es gibt die Möglichkeit das Kontextmenü in der DSA.MSC (AD User &Computer) zu erweitern. Wie das geht steht hier:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/registering_a_static_context_menu_item.asp

Damit der Menüpunkt auch funktioniert, muss das Skript auf dem Client oder Server auf dem DSA.MSC ausgeführt wird im Path vorhanden sein.

Also los geht s:

Kontextmenü erstellen:

ADSIEDIT starten und mit der Configuration Partition verbinden. (Wer nicht weiß was ADSIEDIT ist sollte sich erstmal damit beschäftigen bevor er hier Änderungen durchführt)

Hier wechselt man in den Reiter CN=DisplaySpecifiers. Dort findet man verschiedene Ordner für die jeweils entsprechende Sprache. Deutsch ist bekannterweise 1031 was hexadezimal 407 ist.
Hat man ein Deutsches System also in den Ordner CN=407. Wichtig ist hier die Sprache des Active Directory Users and Computers unter der der Menüpunkt erscheinen soll zu wählen.
Ein Menüpunkt der unter 407 konfiguriert wurde erscheint also nicht auf einem Englischem System.

Falls man nicht weiß welche Sprache man braucht, kann man die Sprachen in der Registry unter:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\ContentIndex\Language

nachschlagen.


Ich habe hier ein englisches System also nehme ich CN=409. Darunter wählt man CN=user-Display mit einem Doppelklick aus. Ganz oben nun auf adminContextMenu.

Hier wird nun der Menüpunkt registriert, Details im MSDN Artikel: Zahl,Beschreibung,Befehl.
Das war s schon. Die Einstellung lässt sich übrigens jederzeit wieder rückgängig machen. Die Zahl ist dabei für die Position des Menüpunktes verantwortlich.

 

Skript kopieren:

Nun das Skript „Template.vbs“ in einen Ordner (z.B. C:\Windows) auf den Rechner kopieren, auf dem die DSA.MSC ausgeführt wird.

Nun können wir die Gruppenmitgliedschaften auf jeden beliebigen Benutzer kopieren indem wir den Zieluser Rechts anklicken und unseren persönlichen Menüpunkt wählen.
Falls DSA.MSC während der ADSIEdit Änderung auf war einmal schließen und neu öffnen, damit die Änderung angezeigt wird.

Das ganze ohne Template User:

Natürlich benötigt man den Template User nicht unbedingt. Man kann auch im Script alles vorgeben. Das Skript CTXUSER.VBS konfiguriert nicht nur die Gruppenmitgliedschaften sondern auch direkt die Remotedesktop
Einstellungen.

Dazu wiederholen wir einfach die ADSIEDIT Schritte. Als Script gebe ich nun 11,Configure as Citrix User…,ctxuser.vbs.


AD User & Computer neu starten damit der neue Menüpunkt erscheint.

 

Hier nun die zwei Beispielskripts, die natürlich an das vorhandene AD angepasst werden müssen.

Template.VBS

‚ —————————-www.barth-edv.de—————————
‚ Name:    template.vbs
‚ Desciption:   Gruppenmitgliedschaften kopieren
‚ Author:   Carsten Barth
‚ Version:   1.0

‚ —————————-www.barth-edv.de—————————

Set objArgs = WScript.Arguments
 If objArgs.Count <> 2 Then
  MsgBox „Dieses Skript kann nur aus dem Kontextmenü des AD Users & Computer ausgeführt werden!“,1,“Template Benutzergruppen kopieren“
 End If

On Error Resume Next
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
Const ADS_PROPERTY_APPEND = 3
strADSPath = objArgs(0)
Set objADS = GetObject(strADSPath)
strDN = objADS.distinguishedName
strUserName = objADS.sAMAccountName
 
Set objUser = GetObject(„LDAP://CN=_template,OU=Citrix,DC=BARTH,DC=CLOUD„)
 
 intPrimaryGroupID = objUser.Get(„primaryGroupID“)
 arrMemberOf = objUser.GetEx(„memberOf“)
 
 If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
     WScript.Echo „The memberOf attribute is not set.“
 Else
     For each Group in arrMemberOf
         Set objGroup = GetObject(„LDAP://“ & Group)
         objGroup.PutEx ADS_PROPERTY_APPEND, „member“, Array(strDN)
         objGroup.SetInfo
     Next
 End If

‚ Display Message
MsgBox „Die Gruppenmitgliedschaften des Template Users wurden nach “ &strUserName & VbCrLf & „kopiert.“ & VbCrLf & „Bitte überprüfen Sie die Gruppenzugehörigkeiten!“, vbOKOnly + vbInformation, strUserName & “ …konfiguriert“

CTXUSER.VBS

‚ —————————-www.barth-edv.de—————————
‚ Name:    ctxuser.vbs
‚ Desciption:   Citrix Umgebungskonfiguration
‚ Author:   Carsten Barth
‚ Version:   1.5

‚ —————————-www.barth-edv.de—————————
Set objArgs = WScript.Arguments
 If objArgs.Count <> 2 Then
  MsgBox „Dieses Skript kann nur aus dem Kontextmenü des AD Users & Computer ausgeführt werden!“,1,“Citrix Umgebungskonfiguration“
 End If

 On Error Resume Next
 Const Enabled = 1
 Const
 Const ADS_PROPERTY_APPEND = 3

 strADSPath = objArgs(0)
 Set objADS = GetObject(strADSPath)
 strDN = objADS.distinguishedName
 strUserName = objADS.sAMAccountName
 ‚ Modify Server Properties here… ‚
 strWTSHomeDir = „\\fileserver\home$\
 strWTSProfilePath = „“
 strWTSHomeDrive = „H:“
 ‚ Write TerminalServicesProfileTab
 objADS.TerminalServicesProfilePath = strWTSProfilePath
 objADS.TerminalServicesHomeDrive = strWTSHomeDrive
 objADS.TerminalservicesHomeDirectory = strWTSHomeDir & strUserName
 objADS.AllowLogon = Enabled
 ‚ Write  RemoteControlTab
 objADS.EnableRemoteControl = Enabled
 ‚ Write EnvironmentTab
 objADS.ConnectClientDrivesAtLogon = Enabled
 objADS.ConnectClientPrintersAtLogon = Enabled
 objADS.DefaultToMainPrinter = Enabled
 objADS.SetInfo
 ‚ Add User to Citrix Default User Groups
 ‚ DeskNR
 Set objGroup = GetObject _
     („LDAP://CN=DESKTOP-100-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 
 Set objGroup = GetObject _
     („LDAP://CN=WORD-2K10-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 
 Set objGroup = GetObject _
        („LDAP://CN=EXCEL-2K10-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 ‚ Access 2003
 Set objGroup = GetObject _
      („LDAP://CN=POWERPNT-2K10-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 ‚ PowerPoint 2003
 Set objGroup = GetObject _
     („LDAP://CN=ACCESS-2K10-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 ‚ Adobe Acrobat Reader
 Set objGroup = GetObject _
     („LDAP://CN=ADOBERDR-940-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 ‚ Printer Dialog
 Set objGroup = GetObject _
     („LDAP://CN=PRINTDLG-100-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 ‚ Internet Explorer
 Set objGroup = GetObject _
     („LDAP://CN=IE-800-D,OU=Groups,OU=Citrix,DC=BARTH,DC=CLOUD„) 
 objGroup.PutEx ADS_PROPERTY_APPEND, _
     „member“, Array(strDN)
 objGroup.SetInfo
 ‚ Display Message
 MsgBox „Der Benutzer: “ &strUserName & VbCrLf & „wurde fuer die Citrix Umgebung  konfiguriert.“ & VbCrLf & „Bitte überprüfen Sie die Gruppenzugehörigkeiten und die Datenpfade!“, vbOKOnly + vbInformation, strUserName & “ …konfiguriert“

Add to FacebookAdd to DiggAdd to Del.icio.usAdd to StumbleuponAdd to RedditAdd to BlinklistAdd to TwitterAdd to TechnoratiAdd to Yahoo BuzzAdd to Newsvine