Archiv
Benutzer auch nachträglich in viele Gruppen anhand eines Template Users einfügen
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:
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
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 IfOn 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 IfOn Error Resume Next
Const Enabled = 1
Const
Const ADS_PROPERTY_APPEND = 3strADSPath = 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“