sam600 10 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 hallo ich habe ich einen windows2003 dc jetzt will ich von allen usern das passwort aendern. - da ich immer wieder die passwoerter andern muss die frage: gibt es eine moeglichkeit das per batchdatei zu erledigen. z.b.. passwort.bat < user.txt username1 = passwd1 username2 = passwd2 ... danke fuer jeden tip! Zitieren
guybrush 19 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 du kannst im userprofil im active directory bei den usern den checker bei "user muss das passwort bei der nächsten anmeldung ändern" aktivieren. dann kommt beim nächsten anmeldevorgang die maske mit der änderungsaufforderung. dies kann mit einer passwortrichtlinie (die letzten X passwörter dürfen nicht verwendet werden usw...) kombiniert werden. mfg hannes Zitieren
IThome 10 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 Batchbefehle wären NET USER z.B. Microsoft Corporation Oder beim 2003 Server eine Kombination von DSQUERY und DSMOD DSQUERY USER OU=<Benutzer-OU>,DC=TESTDOMAENE,DC=LOCAL|DSMOD USER -PWD <Passwort> Zitieren
sam600 10 Geschrieben 23. Januar 2008 Autor Melden Geschrieben 23. Januar 2008 du kannst im userprofil im active directory bei den usern den checker bei "user muss das passwort bei der nächsten anmeldung ändern" aktivieren. dann kommt beim nächsten anmeldevorgang die maske mit der änderungsaufforderung. erstmal danke fuer die schnelle antwort. das problem ist: ich muss das passwort bestimmen. die pc sind in einem schulungsraum. nach jeder schulung soll ich die passwoerter anpassen bzw. abaendern. ( frage mich nicht warum... ) deshalb habe ich mir gedacht, ich lass die passwoerter der user per batch-script aendern. geht das? oder muss ich jeden user einzeln das passwort aendern. danke Zitieren
guybrush 19 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 dann ist natürlich ithome´s tip der bessere ;-) Zitieren
IThome 10 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 Wenn das Passwort bei allen gleich sein soll, dann erzeuge Dir eine OU, wohin alle zu ändernden Benutzer verschoben werden. Dann mit DSQUERY und DSMOD das Kennwort ändern ... Zitieren
sam600 10 Geschrieben 23. Januar 2008 Autor Melden Geschrieben 23. Januar 2008 dann ist natürlich ithome´s tip der bessere ;-) stimmt, war ich zu schnell beim antworten :) DSQUERY und DSMOD sind doch auch batchfehle. oder wie soll ich das vestehen? hat jemand ein fertiges script? Zitieren
IThome 10 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 Angenommen Deine Domäne heisst SCHULE.LOCAL und alle abzuändernden Benutzer befinden sich in einer OU mit Namen SCHUELER direkt unterhalb der Domäne. Das neue Kennwort für alle Benutzer soll !Kennwort! sein ... DSQUERY USER OU=SCHUELER,DC=SCHULE,DC=LOCAL|DSMOD USER -PWD !Kennwort! Zitieren
sam600 10 Geschrieben 23. Januar 2008 Autor Melden Geschrieben 23. Januar 2008 DSQUERY USER OU=SCHUELER,DC=SCHULE,DC=LOCAL|DSMOD USER -PWD !Kennwort! soweit ist es klar. das problem ist: user1 - passwort1 user2 - passwort2 .... d.h. jeder schueler hat ein anderes passwort. desshalb will ich die passwoerter in einer datei speichern. z.b: passwortdatei.txt user1 - passwort1 ... und das "script" liest die user + passwoerter aud der datei so muss ich das naechstemal "nur" die passwoerter anpassen... und nicht alle user im ad einzeln aendern. geht das - hat mir jemand einen beriff, nachdem ich suchen kann danke Zitieren
Dr Kiffer 10 Geschrieben 23. Januar 2008 Melden Geschrieben 23. Januar 2008 Hey sam600 versuch doch mal vbscript strcontainer = "ou=user,ou=managed" 'OU in der die User sind '*********************************************** '* Connect to a container * '*********************************************** Set objRootDSE = GetObject("LDAP://rootDSE") If strContainer = "" Then Set objContainer = GetObject("LDAP://" & _ objRootDSE.Get("defaultNamingContext")) Else Set objContainer = GetObject("LDAP://" & strContainer & "," & _ objRootDSE.Get("defaultNamingContext")) End If '*********************************************** '* End connect to a container * '*********************************************** for each objuser in objcontainer arrfinduser = finduser(objuser.samaccountname) if arrfinduser(0) <> "" then objUser.SetPassword arrfinduser(1) End If Next Wscript.echo "Fertig :-)" Function finduser(user) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("user.txt", 1) 'Text Datei getrennt mit ; Do While objTextFile.AtEndOfStream <> True strLine = objtextFile.ReadLine arruser = split(strline, ";") if arruser(0) = user then finduser = arruser exit function End if Loop finduser = array ("","") End function hab ich grade mal zusammengeschrieben. Ist mit sicherheit schönder zu gestalten aber sollte funktionieren. Der Code ändert das PW bei den Usern die in der Liste sind. Der rest bleibt unberührt. Vorraussetzung auch hier, das die User alle in einer OU sind. Sollte das nicht der Fall sein, sag nochmal bescheid, da find ich bestimmt auch noch ne Lösung :cool: Gruß Danny Zitieren
sam600 10 Geschrieben 24. Januar 2008 Autor Melden Geschrieben 24. Januar 2008 Der Code ändert das PW bei den Usern die in der Liste sind. Der rest bleibt unberührt. Vorraussetzung auch hier, das die User alle in einer OU sind. Sollte das nicht der Fall sein, sag nochmal bescheid, da find ich bestimmt auch noch ne Lösung :cool: hallo Danny erstmal vielen vielen dank fuer deine ( bzw. fuer eure ) hilfe!!! die user sind in unterschiedlichen OU ( dozent1, dozent2, ... ). wie muss die text datei aufgebaut sein? vorab danke Zitieren
Dr Kiffer 10 Geschrieben 24. Januar 2008 Melden Geschrieben 24. Januar 2008 So.. da hab ich auch noch was für dich, wenn die User in unterschiedlichen OUs sind. Textdatei user.txt ist im format User1;pass1 User2;Pass2 musst nur noch in der ersten Zeile den basestr an deine umgebung anpassen. basestr = "dc=domäne,dc=local" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("user.txt", 1) 'Text Datei getrennt mit ; Do While objTextFile.AtEndOfStream <> True strLine = objtextFile.ReadLine arruser = split(strline, ";") strusercn = getusercn(arruser(0),basestr) if strusercn <> "" then changepw strusercn,arruser(1) End If Loop Wscript.echo "Fertig :-)" Function changepw(usercn,strpw) Set objuser = GetObject(usercn) objUser.SetPassword strpw End function Function getuserCN(struser,basestr) Const ADS_SCOPE_SUBTREE = 2 filterStr = "(&(objectclass=user)(samaccountname=" & struser & "))" Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCOmmand.ActiveConnection = objConnection objCommand.CommandText = _ "<LDAP://" & baseStr & ">;" & filterStr & ";ADsPath;subtree" objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute On Error Resume Next objRecordSet.MoveFirst if err.number = 3021 then wscript.echo "Datensatz " & struser & " nicht gefunden" Exit Function End If Do Until objRecordSet.EOF getuserCN = objRecordSet.Fields(0) objRecordSet.MoveNext Loop End Function viel spaß Gruß Danny Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.