Alle User aus dem AD in txt-Datei mittels .vbs
Hallo liebe Administrator-Gemeinde,
habe ein "kleines" Problem mit einer vbScript, welche mir bestimmte Parameter jeden Users im AD, auslesen soll...
Das Script funktioniert soweit, allerdings bekomme ich es nicht hin, dass ich alle User "ausgeworfen" bekomme, sondern ich müsste nach jedem einzeln suchen...
Hier das Script:
Bei mir hackt es hier an der Variablen "jeder User"...
Könnt ihr mir da weiterhelfen???
Vielen Dank schon einmal für eure Hilfe...
habe ein "kleines" Problem mit einer vbScript, welche mir bestimmte Parameter jeden Users im AD, auslesen soll...
Das Script funktioniert soweit, allerdings bekomme ich es nicht hin, dass ich alle User "ausgeworfen" bekomme, sondern ich müsste nach jedem einzeln suchen...
Hier das Script:
Option Explicit
Const C_User = "LDAP://CN=Test,OU=IT,DC=Test,DC=de"
Const C_Log = "C:\test.log"
Dim O_User
Dim O_FSO
Dim O_Log
Set O_User = GetObject(C_User)
Set O_FSO = CreateObject("Scripting.FileSystemObject")
Set O_Log = O_FSO.OpenTextFile(C_Log,2,True)
O_Log.writeline C_User
O_Log.writeline ""
'O_User.GetInfo
O_Log.writeline "CN: " & O_User.cn
O_Log.writeline "Firma: " & O_User.company
O_Log.writeline "Vorname: " & O_User.GivenName
O_Log.writeline "Nachname: " & O_User.sn
O_Log.writeline "Mail-Adresse: " & O_User.Mail
O_Log.writeline "AD-Name: " & O_User.Name
O_Log.writeline "sAMAccount: " & O_User.sAMAccountName
O_Log.writeline "User-Principal-Name: " & O_User.userPrincipalName
O_Log.writeline ""
If O_User.IsAccountLocked = True Then
O_Log.writeline "Account gesperrt: JA"
Else
O_Log.writeline "Account gesperrt: Nein"
End If
If O_User.userAccountControl And 2 Then
O_Log.writeline "Account deaktiviert: JA"
Else
O_Log.writeline "Account deaktiviert: Nein"
End If
Bei mir hackt es hier an der Variablen "jeder User"...
Könnt ihr mir da weiterhelfen???
Vielen Dank schon einmal für eure Hilfe...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 179528
Url: https://administrator.de/forum/alle-user-aus-dem-ad-in-txt-datei-mittels-vbs-179528.html
Ausgedruckt am: 23.04.2025 um 05:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo dabaeuml und willkommen im Forum!
Im "Script Center"
sollte sich doch etwas Passendes (zB das) als Anhaltspunkt finden lassen (auch wenn dort nicht "VBS", sondern "VB.NET" steht) ...
Grüße
bastla
Im "Script Center"
http://gallery.technet.microsoft.com/scriptcenter/site/search?f.Type=RootCategory&f.Value=activedirectory&f.Text=Active%20Directory&f[1].Type=SubCategory&f[1].Value=useraccounts&f[1].Text=Benutzerkonten&pageIndex=1
Grüße
bastla
Hallo dabaeuml!
Da das verlinkte Script etwas schütter kommentiert ist, hole ich es mal rüber und gebe etwas Senf dazu (das Testen überlasse ich aber Dir
):
Aufgrund des "
auch auf
vereinfachen.
Grüße
bastla
Da das verlinkte Script etwas schütter kommentiert ist, hole ich es mal rüber und gebe etwas Senf dazu (das Testen überlasse ich aber Dir
'* Original von: http://gallery.technet.microsoft.com/scriptcenter/1e3eca73-21c5-4ee4-9bb0-e43ed138aec7
'*
'* description: export users from Active Directory to a comma separated text file.
'* Use the text file to create users in a new AD with the accompanying import script.
'*
'* author: Chris Pilling
'* date: 18 June 2008
'* edit the attributes exported to suit
'* after running it is probably best to delete lines from the text file for system generated accounts
Zieldatei = "C:\test.log"
Delim = ";" ' Trennzeichen für Felder in der Zieldatei (im Original ",")
Const ForAppending = 8
Set objRoot = GetObject("LDAP://RootDSE") ' \
strDNC = objRoot.Get("DefaultNamingContext") ' |-> Objekt für Domain-Root als Ausgangspunkt erstellen
Set objDomain = GetObject("LDAP://" & strDNC) ' /
Set objFSO = CreateObject("Scripting.FileSystemObject")
Call enumMembers(objDomain) ' Aufruf der eigentlichen Verarbeitungsschleife
' Wenn ab einer bestimmten OU begonnen werden soll, oben zB mit
'Set objDomain = GetObject("LDAP://OU=IT,DC=Test,DC=de")
' diese OU vorgeben ...
'Ende Hauptprogramm
Sub enumMembers(objDomain) ' Unterprogramm, das für jeden Container / jede OU aufgerufen wird
On Error Resume Next 'Fehler werden uns nicht stoppen! ;-)
For Each objMember In objDomain ' alle Objekte durchgehen
If objMember.Class = "user" Then ' verarbeiten, wenn es ein "User"-Objekt ist
'* edit the attributes you want to export here - von den folgenden Zeilen nur jene
' behalten, die benötigt werden (die übrigen auskommentieren oder löschen) und
' fehlende Zeilen (wie zB für "company") ergänzen -
' entsprechend dann auch unten die Erstellung des Datensatzes anpassen
If Not(IsEmpty(objMember.samAccountName)) Then
samAccountName = objMember.samAccountName
Else
samAccountName = ""
End If
If Not(IsEmpty(objMember.CN)) Then Cn = objMember.CN Else Cn = "" End If
If Not(IsEmpty(objMember.GivenName)) Then FirstName =objMember.GivenName Else FirstName = "" End If
If Not(IsEmpty(objMember.sn)) Then Lastname = objMember.sn Else LastName = "" End If
If Not(IsEmpty(objMember.UserPrincipalName)) Then
UserPrincipalName = objMember.UserPrincipalName
Else
Name = ""
End If
If Not(IsEmpty(objMember.ProfilePath)) Then
ProfilePath = objMember.ProfilePath
Else
Profile = ""
End If
If Not(IsEmpty(objMember.HomeDrive)) Then HomeDrive = objMember.HomeDrive Else HomeDrive = "" End If
If Not(IsEmpty(objMember.HomeDirectory)) Then
HomeDirectory = objMember.HomeDirectory
Else
HomeDirectory = ""
End If
If Not(IsEmpty(objMember.ScriptPath)) Then
LoginScript = objMember.ScriptPath
Else
LoginScript = ""
End If
' ab jetzt stehen alle oben ausgelesenen Werte in den entsprechenden Variablen zur Verfügung
'Datensatz zusammenstellen, im Original Komma als Trennzeichen, in der adaptierten Fassung das oben per Variable festgelegte ";"
' Original-Zeile:
strText1 = SamAccountName & "," & CN & "," & FirstName & "," & LastName & "," & UserPrincipalName & _
"," & ProfilePath & "," & HomeDrive & "," & HomeDirectory & "," & LoginScript
' adaptiert:
strText1 = SamAccountName & Delim & CN & Delim & FirstName & Delim & LastName & Delim & UserPrincipalName & _
Delim & ProfilePath & Delim & Homedrive & Delim & HomeDirectory & Delim & LoginScript
'WScript.Echo strText1 ' Ausgabe des Datensatzes in der Konsole (wenn über "cscript" gestartet; zu empfehlen) oder als MsgBox
Set objTextFile = objFSO.OpenTextFile(Zieldatei, ForAppending, True) ' Textdatei zum Anfügen (des neuen Satzes / der neuen Zeilen) öffnen
objTextFile.WriteLine(strText1) ' Datensatz in Textdatei schreiben und
'### hier Deinen Ausgabecode als Ersatz für die einzeilige Version mit strText1 platzieren, also etwa:
'objTextFile.WriteLine objMember.ADSPath
'objTextFile.WriteLine
'objTextFile.WriteLine "CN: " & Cn
' ...
' ####
objTextFile.Close ' Zieldatei wieder schließen
End If
If objMember.Class = "organizationalUnit" or objMember.Class = "container" Then ' Ist das Objekt ein Container / eine OU ...
enumMembers (objMember) ' ... das Unterprogramm (rekursiv) aufrufen, um dieses Objekt abzuarbeiten
End If
Next
End Sub
On Error Resume Next
" ließen sich die Zeilen der ArtIf Not(IsEmpty(objMember.CN)) Then Cn = objMember.CN Else Cn = "" End If
Cn = "" : Cn = objMember.CN
Grüße
bastla
Hallo dabaeuml!

"
heißt dann eben "Wenn der Rückgabewert von
Da es keine Funktion "
gibt, muss eben nach dem Gegenteil gefragt werden (an doppelte Verneinungen gewöhnt man/frau sich mit der Zeit) ...
Grüße
bastla
Warum nimmst du mal "If Not" und dann mal wieder "If" her??
Ich war das doch gar nicht ... "
Not
" ist ja nur eine "Verneinung" und kehrt einfach die Fragestellung um -If Not(IsEmpty(objMember.CN)) Then ...
objMember.CN
nicht leer ist" oder, einfacher, wenn objMember.CN
einen Rückgabewert liefert, dann ...Da es keine Funktion "
IsFull()
" Grüße
bastla