sarekhl
Goto Top

AD-Scripting

Hallo zusammen,

weiß jemand, wie ich folgende Aufgaben bei Windows Server 2000 / 2003 / 2008 per Script lösen kann:

  1. Bei allen Benutzern, bei denen das Kennwort leer ist (die sich also noch kein Kennwort gegeben haben), soll die Option "Benutzer muß Kennwort bei der nächsten Anmeldung ändern" gesetzt werden.
  2. Bei allen Benutzern, bei denen "Benutzer muß Kennwort bei der nächsten Anmeldung ändern" NICHT gesetzt ist, soll "Kennwort läuft nie ab" aktiviert werden.


Danke im Voraus,
André


P.S.: Gibt es im Netz irgendwo eine Vernünftige Anleitung zum AD-Scripting?

Content-Key: 117215

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

Printed on: April 25, 2024 at 12:04 o'clock

Member: bastla
bastla Jun 01, 2009 at 11:27:28 (UTC)
Goto Top
Hallo SarekHL!

Sollte sich ("inspiriert" durch zB http://www.nabble.com/Query-for-blank-passwords-in-Active-Directory-td9 ..., http://techtasks.com/code/viewbookcode/1596 oder http://groups.google.com/group/microsoft.public.scripting.vbscript/brow ... ) mit
On Error Resume Next
strAdsPath = "dc=fabrikam,dc=com"  

Const ADS_SCOPE_SUBTREE = 2
strPassword = ""  

Set objConnection = CreateObject("ADODB.Connection")  
Set objCommand =   CreateObject("ADODB.Command")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  

objCommand.CommandText = _
    "SELECT AdsPath FROM 'LDAP://" & strAdsPath & "' WHERE objectCategory='user'"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    strPath = objRecordSet.Fields("AdsPath").Value  
    Set objUser = GetObject(strPath)
    objUser.ChangePassword strPassword, strPassword
    If Err= 0 or Err = -2147023569 Then
        objUser.Put "pwdLastSet", 0  
        objUser.SetInfo
        WScript.Echo objUser.CN
    End If
    Err.Clear
    objRecordSet.MoveNext
Loop
bzw
On Error Resume Next
strAdsPath = "dc=fabrikam,dc=com"  

Const ADS_SCOPE_SUBTREE = 2
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000

Set objConnection = CreateObject("ADODB.Connection")  
Set objCommand =   CreateObject("ADODB.Command")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  

objCommand.CommandText = _
    "SELECT AdsPath FROM 'LDAP://" & strAdsPath & "' WHERE objectCategory='user'"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    strPath = objRecordSet.Fields("AdsPath").Value  
    Set objUser = GetObject(strPath)
WScript.Echo strPath
    Set objPwdLastSet = objUser.pwdLastSet
    If (objPwdLastSet.HighPart <> 0) Or (objPwdLastSet.LowPart <> 0) Then
        lngFlag = objUser.userAccountControl
WScript.Echo lngFlag
        If (lngFlag And ADS_UF_DONT_EXPIRE_PASSWD) = 0 Then
            lngFlag = lngFlag Or ADS_UF_DONT_EXPIRE_PASSWD
            objUser.userAccountControl = lngFlag
            objUser.SetInfo
        End If
    End If 
    objRecordSet.MoveNext
Loop
machen lassen.

Grüße
bastla
Member: Biber
Biber Jun 13, 2009 at 11:45:19 (UTC)
Goto Top
Moin SarekHL,

danke für Dein schnelles und ausführliches Feedback zu bastlas Antwort.
Könntest Du Deine Rückmeldung noch dahingehend vervollständigen, dass

  • Du entweder zurückmeldest "Danke, funktioniert." und den Beitrag auf "Erledigt" setzt oder
  • schreibst "Danke, aber ich bekomm es nicht zu Fliegen. Folgender Fehler tritt auf:..."
  • oder zurückmeldest : "Meine Tante Klara hat mir ein Hotel auf dem Malediven vererbt. Ich klink mich aus" und den Beitrag auf gelöst setzt.
  • oder zurückmeldest: "bastlas Lösungen sind immer so schwer verständlich, ich warte auf Alternativen..." face-wink


Ohne Rückmeldung nützt eine Frage mit einer Antwort wenig.

Grüße
Biber
Member: SarekHL
SarekHL Jun 13, 2009 at 16:15:22 (UTC)
Goto Top
Lieber Biber,

da hast Du natürlich völlig Recht. Der Grund für das fehlende Feedback ist ganz einfach: Ich bin noch nicht dazu gekommen, es zu testen. Bevor ich das mache, muß ich erst mal das AD sichern, damit ich es wiederherstellen kann, falls das Script eben funktioniert und irgendwelche Sachen passieren, die nicht passieren sollen. Und genau dazu bin ich noch nicht gekommen. Momentan ist bei uns Hochbetrieb ...


Schöne Grüße,
André