viprex
Goto Top

Single Sign On Problem mit Active Directory Benutzer, die mittels VB-Skript angelegt werden

Hallo zusammen,

vor einiger Zeit sollte ich in unserem Active Directory 2003 ca. 80 Benutzer auf einmal anlegen. Dazu habe ich mich eines Skripts bedient, welches dies bequem für erledigen soll. Leider tauchen heute Probleme mit dem durchreichen der Windows Anmeldung an unser Intranet Portal auf. Diese 80 Benutzer haben bis heute ihr Benutzerkonto nicht genutzt. Ein Benutzer nutzt das Konto nun doch und soll natürlich Zugriff auf unser Intranet Portal erhalten. Dies funktioniert mittels SSO seit langer Zeit bei allen Benutzern problemlos, nur bei ihr nicht. Hier wird die Anmeldung nicht ans Portal durchgereicht, der Portalserver meldet nur zurück, dass der Benutzer nicht bekannt sei. Dies stimmt aber nicht, da der Portalserver für diesen Benutzer mittels LDAP Replikation bereits ein Konto angelegt hat (wie bei allen anderen auch).

Jetzt habe ich durch Tests festgestellt, dass alle Benutzer, die ich mittels folgendem Skript anlege, die SSO Anmeldung am Intranetportal nicht nutzen können. Lösche ich eines diese Benutzerkonto und erstelle es händisch über die AD Konsole neu, läuft alles wie geschmiert. Einstellungen sind oberflächlich diesselben.

Daher meine Frage: Was vergisst mein Skript zu tun, das anscheinend beim Anlegen des Benutzer über die AD Management Konsole gemacht wird? Gibt es noch irgendeine Einstellung, die ich vergessen habe? Irgendein Feld, welches nicht gefüllt wurde? Eine Eigenschaft, die vergessen wurde?

Vielen Dank für eure Hilfe! Ich möchte ungerne alle Benutzer händisch neu Anlegen müssen und hoffe daher sehr auf Hilfe face-smile

Hier das Skript:

Dim objFSO, f, Zeile, Feld
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set f = objFSO.OpenTextFile ("names.txt",1,0)

Do while not f.AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,",")
PNR = Feld(0)
Nachname = Feld(1)
Vorname = Feld(2)
Abteilung = Feld(3)
Funktion = Feld(4)
Fullname = Nachname & "\, " & Vorname
Passwort = "12345"
Benutzer = left(Vorname, 1) & "." & Nachname
Call BenutzerAnlegen(Nachname,Vorname,Fullname,PNR,Stufe,Abteilung,Funktion,Passwort,Benutzer)
Loop
f.Close
Wscript.Quit(0)

Sub BenutzerAnlegen(Nachname,Vorname,Fullname,PNR,Stufe,Abteilung,Funktion,Passwort,Benutzer)
Dim objOU, objUser
Set objOU = GetObject("LDAP://OU=01_neue MA,OU=Sonderkonten,OU=User,OU=WX,DC=YZ,DC=de")
Set objUser = objOU.Create("user", "CN=" & FullName)

'create user account
objUser.Put "sAMAccountName", Benutzer
objUser.Put "userPrincipalName", Benutzer & "@YZ.de"
objUser.Put "displayName", Nachname & ", " &  Vorname 
objUser.Put "givenName", Vorname
objUser.Put "sn", Nachname
'objUser.Put "description", ""
objUser.Put "department", Abteilung
objUser.Put "title", Funktion
objUser.Put "initials", PNR
objUser.Put "wwwHomePage", "http://www.YZ.de"
objUser.Put "company", "Firmenname"
objUser.Put "streetAddress", "Straße"
objUser.Put "postalCode", "PLZ"
objUser.Put "l", "Ort"
objUser.Put "st", "Bundesland"
objUser.Put "c", "DE"
objUser.Put "scriptPath", "_login.bat"
objUser.Put "homeDirectory", "c:\"
objUser.SetInfo

'stuff that has to be set after account created
Const Enabled = 1
Const Disabled = 0

objUser.ConnectClientDrivesAtLogon = Disabled
objUser.ConnectClientPrintersAtLogon = Enabled
objUser.DefaultToMainPrinter = Enabled
objUser.TerminalServicesProfilePath = ""
objUser.TerminalServicesHomeDirectory = "\\DC1\wtshome$\" & Benutzer
objUser.TerminalServicesHomeDrive = "i:"
objUser.AllowLogon = Enabled
 
objUser.MaxDisconnectionTime = 30
objUser.MaxConnectionTime = 0
objUser.MaxIdleTime = 0
objUser.BrokenConnectionAction = Enabled
objUser.ReconnectionAction = Disabled


objUser.SetPassword Passwort
objUser.AccountDisabled = False
objUser.Put "pwdLastSet", 0
objUser.SetInfo

Const ADS_PROPERTY_APPEND = 3 
'put in group "Alle Benutzer"
Set objGroup = GetObject("LDAP://cn=Alle Benutzer,OU=Gruppen1,OU=Services,OU=WX,DC=YZ,DC=de")
objGroup.PutEx ADS_PROPERTY_APPEND,"member", Array("cn=" & Fullname & ",OU=01_neue MA,OU=Sonderkonten,OU=User,OU=WX,DC=YZ,DC=de")
objGroup.SetInfo

'put in group "Gruppe 2"
Set objGroup = GetObject("LDAP://cn=Gruppe 2,OU=Sammelgruppen,OU=Gruppen2,OU=Services,OU=WX,DC=YZ,DC=de")
objGroup.PutEx ADS_PROPERTY_APPEND,"member", Array("cn=" & Fullname & ",OU=01_neue MA,OU=Sonderkonten,OU=User,OU=WX,DC=YZ,DC=de")
objGroup.SetInfo

'put in group "Gruppe 1"
Set objGroup = GetObject("LDAP://cn=Gruppe 1,OU=Gruppen1,OU=Services,OU=WX,DC=YZ,DC=de")
objGroup.PutEx ADS_PROPERTY_APPEND,"member", Array("cn=" & Fullname & ",OU=01_neue MA,OU=Sonderkonten,OU=User,OU=WX,DC=YZ,DC=de")
objGroup.SetInfo

'put in group "Terminalserver"
Set objGroup = GetObject("LDAP://cn=Terminalserver,OU=Gruppen3,OU=Services,OU=WX,DC=YZ,DC=de")
objGroup.PutEx ADS_PROPERTY_APPEND,"member", Array("cn=" & Fullname & ",OU=01_neue MA,OU=Sonderkonten,OU=User,OU=WX,DC=YZ,DC=de")
objGroup.SetInfo

'copy "_Hallo" Verzeichnis in WTSHOME
Const OverWriteFiles = True
WScript.Sleep(500)
objFSO.CopyFolder "\\DC01\wtshome$\_HALLO", "\\DC01\wtshome$\" & Benutzer

End Sub

Content-Key: 170889

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: dog
dog Aug 03, 2011 at 14:25:01 (UTC)
Goto Top
Blende dir in der AD-Konsole mal die erweiterte Ansicht ein, dann geh auf Attirbut-Editor und vergleiche zwischen den Benutzern mal das Attribut primaryGroupID
Member: Viprex
Viprex Aug 03, 2011 at 15:05:56 (UTC)
Goto Top
Vielen Dank für deine Antwort!

Ich kenne zwar den Attribut Editor nicht, aber mittels JXplore habe ich bei beiden Benutzern mal die primaryGroupID ausgelesen: 513 bei beiden Benutzern.

Wenn ich das richtig verstanden habe, kann ich die primäre Gruppe mittels Rechtsklick auf die entsprechende Gruppe unter "Mitglied von" ändern. Dort ist immer Domänen-Benutzern ausgewählt.
Member: dog
dog Aug 03, 2011 at 15:12:48 (UTC)
Goto Top
Hast du mit Jxplore auch mal die anderen Attribute verglichen?
Member: Viprex
Viprex Aug 03, 2011 at 15:16:57 (UTC)
Goto Top
Ja, zumindest habe ich das versucht. Das sind ja unendlich viele Attribute und leider weiß ich nichtmal ansatzweise, welche die wichtigen sind.

Vielleicht hilft folgender Hinweis: Unser Intranetportal nutzt die Standard Windows Schnittstelle um die Anmeldung durchzuwinken. In der Logdatei steht als Fehlermeldung:

Cannot get login information for user = 'T.Test3', domain = 'Y-Z.de'. Cannot resolve login Y-Z.de\T.Test3. Error code 0x00000000.  

Y-Z steht hier für unseren Firmennamen (so heißt eben die Domäne, mit einem - in der Mitte).

Hilft mir (oder dir) das evtl. weiter?

Edit: Ich glaube, dass hier die Anmeldung nur mit T.Test3@Y-Z.de oder DOMÄNE\T.Test3 möglich ist. Evtl. besagt diese Fehlermeldung, dass hier etwas durcheinander gekommen ist?

PS: Der Hersteller unseres Intranet Portals weiß hier auch nicht weiter. Dessen Support wurde schon intensiv kontaktiert.
Member: Xaero1982
Xaero1982 Aug 03, 2011 at 15:35:37 (UTC)
Goto Top
Zitat von @Viprex:
Vielleicht hilft folgender Hinweis: Unser Intranetportal nutzt die Standard Windows Schnittstelle um die Anmeldung durchzuwinken.
In der Logdatei steht als Fehlermeldung:

Cannot get login information for user = 'T.Test3', domain = 'Y-Z.de'. Cannot resolve login  
> Y-Z.de\T.Test3. Error code 0x00000000.

Y-Z steht hier für unseren Firmennamen (so heißt eben die Domäne, mit einem - in der Mitte).

Hilft mir (oder dir) das evtl. weiter?

Edit: Ich glaube, dass hier die Anmeldung nur mit T.Test3@Y-Z.de oder DOMÄNE\T.Test3 möglich ist. Evtl. besagt diese
Fehlermeldung, dass hier etwas durcheinander gekommen ist?


Verstehe ich das richtig?
Euro Domäne heißt Y-Z.de ?

Und die Nutzer, die du angelegt hast schiebst du in die Domäne YZ.de ?
Zitat von @Viprex:
objUser.Put "userPrincipalName", Benutzer & "@YZ.de"


??

VG
Member: Viprex
Viprex Aug 03, 2011 at 15:47:07 (UTC)
Goto Top
Sorry, das ist in der Tat missverständlich. YZ ist im Skript nur ein Platzhalter. Y-Z ebenfalls.