AD User anlegen - Passwort wird nicht gesetzt - Visual Studio 2008
Hallo,
für meine Firma schreibe ich ein Programm in Visual Basic (in Visual Studio 2008 auf Windows SBS 2003), welches das anlegen von Usern im Active Directory erleichtern soll.
Allerdings wird dabei nie das Passwort gesetzt -> Man kann sich also mit diesem User OHNE Passwort in der Domäne anmelden.
Dass das absolut ungut ist, ist klar, aber ich schaff es einfach nicht, diesen Fehler zu beheben. Hab schon so ziemlich alles versucht.
Hier mal der Code der das anlegen betrifft:
Ich bin eigentlich noch Anfänger in VB und der Teil da oben ist auch noch nicht ganz fertig, bzw ne Baustelle. Vielleicht weiß auch jemand, warum ich die Eigenschaft "streetAddress" nicht setzen kann...
für meine Firma schreibe ich ein Programm in Visual Basic (in Visual Studio 2008 auf Windows SBS 2003), welches das anlegen von Usern im Active Directory erleichtern soll.
Allerdings wird dabei nie das Passwort gesetzt -> Man kann sich also mit diesem User OHNE Passwort in der Domäne anmelden.
Dass das absolut ungut ist, ist klar, aber ich schaff es einfach nicht, diesen Fehler zu beheben. Hab schon so ziemlich alles versucht.
Hier mal der Code der das anlegen betrifft:
cname = "CN=" & txt_nachname.Text & " " & txt_vorname.Text
Dim objParent As New DirectoryServices.DirectoryEntry(userdestination, "administrator@baierjj.local", "[entfernt]", DirectoryServices.AuthenticationTypes.Secure)
Dim thepasswort As String = "[entfernt]2"
objChild = objParent.Children.Add(cname, "user")
objChild.Password = thepasswort
objChild.Properties("userPrincipalName").Add(txt_logonname.Text & ouaddition)
objChild.Properties("SAMAccountName").Add(txt_logonname.Text)
objChild.Properties("givenname").Add(txt_vorname.Text)
objChild.Properties("sn").Add(txt_nachname.Text)
objChild.Properties("displayname").Add(txt_nachname.Text & " " & txt_vorname.Text)
objChild.Properties("profilePath").Add(txt_profilePath.Text)
objChild.Properties("homeDirectory").Add(txt_homedirectory.Text)
objChild.Properties("homeDrive").Add("U:")
objChild.Properties("scriptPath").Add(txt_scriptPath.Text)
objChild.Properties("mail").Add(txt_mail.Text)
objChild.Properties("l").Add(txt_city.Text)
objChild.Properties("st").Add(txt_state.Text)
objChild.Properties("postalcode").Add(txt_plz.Text)
objChild.Properties("co").Add(txt_country.Text)
'objChild.Properties("streetAddress").Add(txt_street.Text)
objChild.Properties("extensionAttribute1").Add(extattri1)
objChild.CommitChanges()
Ich bin eigentlich noch Anfänger in VB und der Teil da oben ist auch noch nicht ganz fertig, bzw ne Baustelle. Vielleicht weiß auch jemand, warum ich die Eigenschaft "streetAddress" nicht setzen kann...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82531
Url: https://administrator.de/forum/ad-user-anlegen-passwort-wird-nicht-gesetzt-visual-studio-2008-82531.html
Ausgedruckt am: 14.04.2025 um 23:04 Uhr
7 Kommentare
Neuester Kommentar
japp weil du es nicht ändern oer auslesen kannst per software.
Die ADS blockt jeden zugriff von aussen auf die DB fürs passwort.
Du musst da schon dann einige andere Sachen machen um da was zu ändern. Aber da wirst du hier keine Auskünfte drüber bekommen da diese Infos auch zum Hacken von Passwörtern führen kann.
Habe diese Erfahrung auch gemacht und dann mit viiiiiel Googeln die Antwort gefunden. Kann dir nur den Tip geben das du die MSDN durchforsten solltest. Da findest du Ansätze zu diesem Problem
Gruß
Sven
Die ADS blockt jeden zugriff von aussen auf die DB fürs passwort.
Du musst da schon dann einige andere Sachen machen um da was zu ändern. Aber da wirst du hier keine Auskünfte drüber bekommen da diese Infos auch zum Hacken von Passwörtern führen kann.
Habe diese Erfahrung auch gemacht und dann mit viiiiiel Googeln die Antwort gefunden. Kann dir nur den Tip geben das du die MSDN durchforsten solltest. Da findest du Ansätze zu diesem Problem
Gruß
Sven

Moinsen,
dieses Script stammt nicht von mir, ich habe es lediglich an unsere Bedürfnisse angepasst.
Natürlich habe ich einige Spuren verwischt und es etwas erweitert.
Daher bitte mal genau durchschauen.
Das Script legt nicht nur einen User an, der ein Passwort hat - sondern auch dessen Homeverzeichnis und setzt die rechte für den User und die OU IT.
Ich weiß, das sollte besser dokumentiert sein, aber ich hab grad keine Zeit und dir drängst ja...
dieses Script stammt nicht von mir, ich habe es lediglich an unsere Bedürfnisse angepasst.
Natürlich habe ich einige Spuren verwischt und es etwas erweitert.
Daher bitte mal genau durchschauen.
Das Script legt nicht nur einen User an, der ein Passwort hat - sondern auch dessen Homeverzeichnis und setzt die rechte für den User und die OU IT.
Ich weiß, das sollte besser dokumentiert sein, aber ich hab grad keine Zeit und dir drängst ja...
Domain.vbs
dim rootDSE
set rootDSE = GetObject("LDAP://RootDSE")
domainname=rootDSE.Get("defaultnamingcontext")
set domain = GetObject("LDAP://" & domainname)
' Popup Benutzername
Vname = InputBox("Vorname: ", " Neuen Benutzer in Domain erstellen")
NName = InputBox("Nachname: ", " Neuen Benutzer in Domain erstellen")
Name = Vname & "." & NName
logon = Name & "@Domain"
mail = Name & "@administrator.de"
home ="\\server003\user\" & Name
' Popup Telefonnummer: 00000000
intTel = InputBox("Telefondurchwahl: +49 0000 00", " Neuen Benutzer in Domain erstellen")
Telefon = "+49 00 00 00" & intTel
' Popup Personalnummer in Feld Beschreibung
Perso = InputBox("Personalnummer", " Neuen Benutzer in Domain erstellen")
If MsgBox("Name: "&Name& vbCrLf & "Telefon: " & Telefon & vbCrLf & "Personalnummer: " & Perso&"" , VbExclamation or VbYesNo, " Soll dieser Neue Benutzer in Domain erstellt werden?")= vbYes then
' Ausgabe in Text
WScript.Echo "Name" &"," & "Telefon" &"," & "Personalnummer"
WScript.Echo Name & "," & intTel & "," & Perso
' Ordner anlegen
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("cmd /c md \\server003\user\" & Name)
Return = WshShell.Run("cmd /c md \\server001\profil\" & Name)
Set WshShell = Nothing
Set usr = domain.Create("user", "CN=" & Name & ",OU=User ,OU=Domain")
usr.Put "samAccountName", Name
usr.Put "givenName", Vname
usr.Put "sn", Nname
usr.Put "DisplayName", Name
usr.Put "homeDirectory", home
usr.Put "homeDrive", "n:"
usr.Put "userAccountControl", 512
usr.Put "profilePath","\\server001\profil\" & Name
usr.Put "scriptPath", "login.cmd"
usr.Put "telephoneNumber", Telefon
usr.Put "description" , Perso
usr.Put "postalCode", "0815"
usr.Put "street" , "Lindenstrasse"
usr.Put "userPrincipalName", logon
usr.Put "mail", mail
usr.Put "wWWHomePage", "https://administrator.de"
usr.SetInfo
usr.SetPassword "xxxxxx"
WScript.Sleep 12000
WScript.Sleep 12000
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("%COMSPEC% /c Echo j| cacls \\server001\profil\" & Name & " /t /c /g Domain\" & Name & ":F")
Return = WshShell.Run("%COMSPEC% /c Echo j| cacls \\server001\profil\" & Name & " /t /c /e /g Domain\g__it:F")
Return = WshShell.Run("%COMSPEC% /c Echo j| cacls \\server003\user\" & Name & " /t /c /g Domain\" & Name & ":F")
Return = WshShell.Run("%COMSPEC% /c Echo j| cacls \\server003\user\" & Name & " /t /c /e /g Domain\g__it:F")
Set WshShell = Nothing
Else
End If
Hi,
Ich hab ne Antwort und ne Frage (weiter unten)
ist zwar schon etwas älter der Beitrag aber ich hab ziemlich das gleiche Problem gehabt (das Passwort betreffend) und so gelöst: Direkt nach dem commit vom User anlegen einfach folgenden Code (angepasst) einfügen:
Nun zu meiner Frage:
Ich mache auch ein Programm zum anlegen eines Users im AD und mein Code sieht ähnlich aus wie der von farelm.
Allerdings muss man dafür ja Admin Username und Passwort eingeben, welche ich aus einer vorher ausgeführten Login-Form auslese.
Nun hab ich aber das Problem, dass ich keine Ahnung habe, wie ich überprüfe ob die Angaben der Loginform auch stimmen.
So wies jetzt steht, merkt man ein falsch eingegebenes Passwort quasi erst dann wenn man den User anlegen will.
Hat vielleicht jemand ne Ahnung wie man das lösen kann?
Oder gibts noch ne besser Methode?
Notfalls könnte man ja beim anmelden irgendwie versuchen, mit den eingegebenen Anmelde-Parametern etwas im AD zu modifizieren - aber keine Ahnung wie, was und ob das überhaupt funktioniert.
Gruß
Ich hab ne Antwort und ne Frage (weiter unten)
ist zwar schon etwas älter der Beitrag aber ich hab ziemlich das gleiche Problem gehabt (das Passwort betreffend) und so gelöst: Direkt nach dem commit vom User anlegen einfach folgenden Code (angepasst) einfügen:
Try 'Hier wird das Passwort des Users gesetzt
Dim searcher As New System.DirectoryServices.DirectorySearcher() 'Suchfunktion
searcher.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" & txt_logonname.Text & "))" 'Suchkriterien
searcher.PropertiesToLoad.Add("adspath")
Dim Result As System.DirectoryServices.SearchResult = searcher.FindOne()
Dim usr As New DirectoryServices.DirectoryEntry(Result.Path)
usr.Invoke("SetPassword", password) 'Passwort wird übergeben
usr.CommitChanges() 'Änderungen werden gespeichert
Catch ex As Exception
MsgBox("Beim setzen des Passworts ist ein Fehler aufgetreten, bitte setzen Sie es manuell zurück." & Environment.NewLine & Environment.NewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Setzen des Passworts")
End Try
Nun zu meiner Frage:
Ich mache auch ein Programm zum anlegen eines Users im AD und mein Code sieht ähnlich aus wie der von farelm.
Allerdings muss man dafür ja Admin Username und Passwort eingeben, welche ich aus einer vorher ausgeführten Login-Form auslese.
Nun hab ich aber das Problem, dass ich keine Ahnung habe, wie ich überprüfe ob die Angaben der Loginform auch stimmen.
So wies jetzt steht, merkt man ein falsch eingegebenes Passwort quasi erst dann wenn man den User anlegen will.
Hat vielleicht jemand ne Ahnung wie man das lösen kann?
Oder gibts noch ne besser Methode?
Notfalls könnte man ja beim anmelden irgendwie versuchen, mit den eingegebenen Anmelde-Parametern etwas im AD zu modifizieren - aber keine Ahnung wie, was und ob das überhaupt funktioniert.
Gruß