derber
Goto Top

Kontakt-Objekt zu User-Objekt konvertieren

Guten Tag
In unserem AD existieren eine Kontakte, die von Externen Personen für eine Plattform benötigt werden.
Wir würden nun gerne für diese Kontakte richtige User erstellen und das so verwalten.

Gibt es irgendein Programm oder eine Methode um diese Kontakte-Objekte (lediglich Vorname, Nachname, Displayname und groups vorhanden) in User-Objekte zu konvertieren?

Es sind über 100 Kontakte, darum würde ich das gerne automatisiert machen...
Passwort kann ich danach noch mit einem Script verteilen

Kann mir da jemand weiterhelfen?

Content-Key: 97538

Url: https://administrator.de/contentid/97538

Printed on: April 24, 2024 at 07:04 o'clock

Member: colinardo
colinardo Sep 24, 2008 at 09:02:55 (UTC)
Goto Top
Mit folgendem VBS-Script solltest du das einfach und automatisch lösen können:
Du musst noch die OU's anpassen, einmal dort wo die Kontakte drin liegen("folderContacts"), und dann noch eine OU wo die User reinkommen sollen("targetOU").
Das Script übernimmt auch die bisherigen Gruppenmitgliedschaften des Kontakts für den User. Wie der LoginName aussehen soll kannst du auch auf deine Bedürfnisse zuschneiden, habe als Beispiel folgendes genommen: [Vorname][Nachname]

On Error Resume Next
'Password für Beutzer  
strInitialPassword = "Geheim"  
'Organizational Unit in der die Kontakte drin sind  
Set folderContacts = GetObject("LDAP://ou=Kontakte,dc=sbs2003,dc=local")  

'Organizational Unit in der die User erstellt werden sollen  
Set targetOU = GetObject("LDAP://ou=users,ou=Kontakte,dc=sbs2003,dc=local")  

'Nur "Contact"-Objekte auswählen  
folderContacts.Filter = Array("contact")  

'Für jeden Kontakt einen User erstellen  
For Each contact In folderContacts
	'erstellt den Login-Namen / kann hier angepasst werden  
	LoginName = contact.GivenName & contact.sn
	'User in targetOU erstellen  
	Set objUser = targetOU.Create("User", contact.Name)  
	'Login-Namen   
	objUser.Put "sAMAccountName", LoginName  
	'Speichere Property-Cache ins Benutzerobjekt (erstelle User)  
	objUser.SetInfo
	'Setze die Gruppenmitgliedschaften für den Benutzer  
	groups = contact.GetEx("memberOf")  
	For i = 0 To UBound(groups)
		Set grp = GetObject("LDAP://" & groups(i))  
		grp.Add objUser.ADSPath
	Next
	'Password setzen  
	objUser.SetPassword strInitialPassword
	'Benutzer muss Password bei nächstem Logon ändern  
	objUser.Put "pwdLastSet", 0  
	'Account ist aktiviert  
	objUser.AccountDisabled = False
	'Speichere Property-Cache ins Benutzerobjekt  
	objUser.SetInfo
Next


Dieses nächste Script ließt auch gleich die jeweiligen Passwörter aus einer Textdatei namens "passwords.txt" im gleichen Verzeichnis und vergibt jedem User sein Passwort. Die Textdatei sollte so strukturiert sein:
Für jeden Benutzer eine Zeile: [Name des Kontakts];[Passwort]
D.h. mit Semikolon getrennt.

On Error Resume Next
Set objFS = CreateObject("scripting.FileSystemObject")  
Set oDic = CreateObject("scripting.dictionary")  
Set pwdFile = objFS.OpenTextFile("passwords.txt",1)  
Do While pwdFile.AtEndOfStream <> True
	line = Split(pwdFile.ReadLine,";")  
	user = Trim(line(0))
	password = Trim(line(1))
	oDic.Add user, password
Loop
pwdFile.Close

'Organizational Unit in der die Kontakte drin sind  
Set folderContacts = GetObject("LDAP://ou=Kontakte,dc=sbs2003,dc=local")  

'Organizational Unit in der die User erstellt werden sollen  
Set targetOU = GetObject("LDAP://ou=users,ou=Kontakte,dc=sbs2003,dc=local")  

'Nur "Contact"-Objekte auswählen  
folderContacts.Filter = Array("contact")  

'Für jeden Kontakt einen User erstellen  
For Each contact In folderContacts
	'erstellt den Login-Namen / kann hier angepasst werden  
	LoginName = contact.GivenName & contact.sn
	'User in targetOU erstellen  
	Set objUser = targetOU.Create("User", contact.Name)  
	'Login-Namen   
	objUser.Put "sAMAccountName", LoginName  
	'Speichere Property-Cache ins Benutzerobjekt (erstelle User)  
	objUser.SetInfo
	'Setze die Gruppenmitgliedschaften für den Benutzer  
	groups = contact.GetEx("memberOf")  
	For i = 0 To UBound(groups)
		Set grp = GetObject("LDAP://" & groups(i))  
		grp.Add objUser.ADSPath
	Next
	If oDic.Exists(contact.cn) Then
		objUser.SetPassword oDic.Item(Trim(contact.cn)
	End If

	'Benutzer muss Password bei nächstem Logon ändern  
	objUser.Put "pwdLastSet", 0  
	'Account ist aktiviert  
	objUser.AccountDisabled = False
	'Speichere Property-Cache ins Benutzerobjekt  
	objUser.SetInfo
Next


Viel Spaß damit face-wink
Member: derber
derber Sep 24, 2008 at 14:46:47 (UTC)
Goto Top
ui, vielen vielen dank face-smile

genau sowas mit gruppenübernahme habe ich gesucht.

super.
Member: colinardo
colinardo Sep 25, 2008 at 06:50:37 (UTC)
Goto Top
freut mich wenn ich helfen konnte face-smile