zmankay
Goto Top

VBScript AD durchsuchen und Verzeichnisleichen löschen

Hallo,

ich habe ein Script welches mir in einer AD alle Verzeichnisse löscht, die keinem Benutzer mehr zugeordnet sind. Nun möchte ich aber, dass ich nicht mehr jedesmal die OU angeben muss in dem das Script suchen muss, sondern möchte dass das Script auf der gesamten AD sucht. Dies hätte den Vorteil, dass ich beliebig viele OUs mit Benutzern anlegen kann und das Script nur einmal ausführen muss und nicht ständig an die OU anpassen.

Leider fehlt mir hier absolut der Ansatz, wie ich danach suchen soll, bzw. wie ich eine solche Suche erstelle. Wenn ich unten die OU einfach weglasse, dann sucht mir das Script zwar auf dem Base Level der AD, löscht aber logischerweise alle Verzeichnisse, weil ja auf dem Level keine Benutzer existieren.

Wenn ich nur eine OU angebe, löscht er mir folglich auch die Verzeichnisse von Benutzern aus einer anderen OU.

Es wäre toll, wenn mir jemand eine Idee, oder sogar Lösung für das Problem hat.

Danke


Const strDomainOU = "LDAP:OU=test, DC=ads,DC=test,DC=local"

Const strDomainPath = "LDAP:
OU=test, DC=ads,DC=test,DC=local"
Const strLDAPHead = "LDAP://"
Const strDomain = ",OU=test, DC=ads,DC=test,DC=local"
Const strHomeDirRoot = "\\server\home$\"


/code>

Content-Key: 91134

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: bastla
bastla Jul 02, 2008 at 19:25:56 (UTC)
Goto Top
Hallo zmankay!

Wenn sich Dein Problem auf "Finde alle AD-Benutzer" reduzieren lässt, gäbe es etwa folgende Lösung: Find all users (VBScript)

Anderer Ansatz: List all users and some of their properties in a Windows 2000 AD domain or Windows NT4 domain

Grüße
bastla
Member: zmankay
zmankay Jul 03, 2008 at 12:55:35 (UTC)
Goto Top
Das "Finde alle AD-Benutzer" Script ist schon eine gute Sache. Nun ist es aber so, dass ich hier auf einem für mich völlig neuen Gebiet bin.

Ich will das Script

' ------ SCRIPT CONFIGURATION ------  
strDomainDN = "<DomainDN>"    ' e.g. dc=rallencorp,dc=com  
' ------ END CONFIGURATION ---------  

strBase   =  "<LDAP://" & strDomainDN & ">;"  
' To search the whole forest using the global catalog, uncomment the following line:  
' strBase   =  "<GC://" & strDomainDN & ">;"  

strFilter = "(&(objectclass=user)(objectcategory=person));"   
strAttrs  = "name;"  
strScope  = "subtree"  

set objConn = CreateObject("ADODB.Connection")  
objConn.Provider = "ADsDSOObject"  
objConn.Open "Active Directory Provider"  
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
while Not objRS.EOF
    Wscript.Echo objRS.Fields(0).Value
    objRS.MoveNext
wend

mit meinem Löschskript kombinieren.

Const strDomainOU		= "LDAP://OU=test,DC=ads,DC=test,DC=local"  
Const strHomeDirRoot    	= "\\server\home$\"  


' Bind to Domain. Create Array of Users.  

Set objDomain = GetObject(strDomainOU)
objDomain.Filter=Array("user")  

' Output error if bind fails.  
If Err.Number <> vbEmpty Then
    WScript.Quit
End If

set objFileSystem = CreateObject("Scripting.FileSystemObject")  
set objFolder = objFileSystem.GetFolder(strHomeDirRoot)

'Check every folder for existing user  

For Each objSubFolder in objFolder.SubFolders

    bool = false   			'No existing user   

     For Each objUser in objDomain	
         If objSubFolder.Name=objUser.sAMAccountName then
         bool=true					        'Folder match User   
         End If
     Next    ' End of objUser  
        
     'check for matched user   
     if not bool then
        set objDeleteFileSystem = CreateObject("Scripting.FileSystemObject")   
        set objDeleteFolder = objFileSystem.GetFolder(strHomeDirRoot&objSubFolder.Name)
'	Wscript.Echo("Folder gelöscht:" & objDeleteFolder.Name)  
        objDeleteFolder.Delete true     
     End If


Next    ' End of objSubFolder  

Ich würde gerne wissen, wo ich da ansetzen muss, dass es funktioniert. Zum Beispiel die Benutzer in ein Array übergegen und das Array an das andere Script, oder beide ineinander packen?. Nur wie, das ist die große Frage.

Danke für Eure Hinweise.