Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Alle User aus dem AD in txt-Datei mittels .vbs

Frage Microsoft Windows Server

Mitglied: dabaeuml

dabaeuml (Level 1) - Jetzt verbinden

25.01.2012 um 14:43 Uhr, 3074 Aufrufe, 6 Kommentare

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:


01.
Option Explicit 
02.
 
03.
Const C_User = "LDAP://CN=Test,OU=IT,DC=Test,DC=de" 
04.
Const C_Log = "C:\test.log" 
05.
 
06.
Dim O_User 
07.
Dim O_FSO 
08.
Dim O_Log 
09.
 
10.
Set O_User = GetObject(C_User) 
11.
Set O_FSO = CreateObject("Scripting.FileSystemObject") 
12.
Set O_Log = O_FSO.OpenTextFile(C_Log,2,True) 
13.
 
14.
O_Log.writeline C_User 
15.
O_Log.writeline "" 
16.
 
17.
'O_User.GetInfo 
18.
 
19.
O_Log.writeline "CN: " & O_User.cn 
20.
O_Log.writeline "Firma: " & O_User.company 
21.
O_Log.writeline "Vorname: " & O_User.GivenName 
22.
O_Log.writeline "Nachname: " & O_User.sn 
23.
O_Log.writeline "Mail-Adresse: " & O_User.Mail 
24.
O_Log.writeline "AD-Name: " & O_User.Name 
25.
O_Log.writeline "sAMAccount: " & O_User.sAMAccountName 
26.
O_Log.writeline "User-Principal-Name: " & O_User.userPrincipalName 
27.
 
28.
O_Log.writeline "" 
29.
 
30.
If O_User.IsAccountLocked = True Then 
31.
	O_Log.writeline "Account gesperrt: JA" 
32.
Else 
33.
	O_Log.writeline "Account gesperrt: Nein" 
34.
End If 
35.
If O_User.userAccountControl And 2 Then 
36.
	O_Log.writeline "Account deaktiviert: JA" 
37.
Else 
38.
	O_Log.writeline "Account deaktiviert: Nein" 
39.
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...
Mitglied: bastla
25.01.2012 um 14:55 Uhr
Hallo dabaeuml und willkommen im Forum!

Im "Script Center"
http://gallery.technet.microsoft.com/scriptcenter/site/search?f[0].Type=RootCategory&f[0].Value=activedirectory&f[0].Text=Active%20Directory&f[1].Type=SubCategory&f[1].Value=useraccounts&f[1].Text=Benutzerkonten&pageIndex=1
sollte sich doch etwas Passendes (zB das) als Anhaltspunkt finden lassen (auch wenn dort nicht "VBS", sondern "VB.NET" steht) ...

Grüße
bastla
Bitte warten ..
Mitglied: dabaeuml
25.01.2012 um 15:31 Uhr
Hallo bastla,

Danke für die schnelle Info...

Leider hilft mir auch dieser Ansatz nicht viel weiter...
(hab nicht wirklich viel Ahnung vom scripten)... /
Bitte warten ..
Mitglied: bastla
25.01.2012 um 19:14 Uhr
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 ):
01.
'* Original von: http://gallery.technet.microsoft.com/scriptcenter/1e3eca73-21c5-4ee4-9bb0-e43ed138aec7 
02.
'* 
03.
'* description: export users from Active Directory to a comma separated text file.  
04.
'*  Use the text file to create users in a new AD with the accompanying import script.  
05.
'*                
06.
'* author: Chris Pilling  
07.
'* date: 18 June 2008  
08.
'* edit the attributes exported to suit  
09.
'* after running it is probably best to delete lines from the text file for system generated accounts  
10.
   
11.
Zieldatei = "C:\test.log" 
12.
Delim = ";" ' Trennzeichen für Felder in der Zieldatei (im Original ",") 
13.
   
14.
Const ForAppending = 8  
15.
   
16.
Set objRoot = GetObject("LDAP://RootDSE")     ' \  
17.
strDNC = objRoot.Get("DefaultNamingContext")  '  |-> Objekt für Domain-Root als Ausgangspunkt erstellen 
18.
Set objDomain = GetObject("LDAP://" & strDNC) ' / 
19.
 
20.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
21.
   
22.
Call enumMembers(objDomain) ' Aufruf der eigentlichen Verarbeitungsschleife 
23.
'  Wenn ab einer bestimmten OU begonnen werden soll, oben zB mit 
24.
'Set objDomain = GetObject("LDAP://OU=IT,DC=Test,DC=de") 
25.
' diese OU vorgeben ... 
26.
 
27.
'Ende Hauptprogramm 
28.
 
29.
Sub enumMembers(objDomain) ' Unterprogramm, das für jeden Container / jede OU aufgerufen wird 
30.
On Error Resume Next 'Fehler werden uns nicht stoppen! ;-) 
31.
   
32.
For Each objMember In objDomain ' alle Objekte durchgehen 
33.
    If objMember.Class = "user" Then ' verarbeiten, wenn es ein "User"-Objekt ist 
34.
        '* edit the attributes you want to export here - von den folgenden Zeilen nur jene 
35.
        '  behalten, die benötigt werden (die übrigen auskommentieren oder löschen) und 
36.
        '  fehlende Zeilen (wie zB für "company") ergänzen -  
37.
        '  entsprechend dann auch unten die Erstellung des Datensatzes anpassen 
38.
		 
39.
        If Not(IsEmpty(objMember.samAccountName)) Then   
40.
            samAccountName = objMember.samAccountName   
41.
        Else   
42.
            samAccountName = ""   
43.
        End If  
44.
        If Not(IsEmpty(objMember.CN)) Then Cn = objMember.CN Else Cn = "" End If  
45.
        If Not(IsEmpty(objMember.GivenName)) Then FirstName =objMember.GivenName Else FirstName = "" End If  
46.
        If Not(IsEmpty(objMember.sn)) Then Lastname = objMember.sn Else LastName = "" End If  
47.
        If Not(IsEmpty(objMember.UserPrincipalName)) Then   
48.
            UserPrincipalName = objMember.UserPrincipalName   
49.
        Else   
50.
            Name = ""   
51.
        End If  
52.
        If Not(IsEmpty(objMember.ProfilePath)) Then   
53.
            ProfilePath = objMember.ProfilePath   
54.
        Else   
55.
            Profile = ""   
56.
        End If  
57.
        If Not(IsEmpty(objMember.HomeDrive)) Then HomeDrive = objMember.HomeDrive Else HomeDrive = "" End If  
58.
        If Not(IsEmpty(objMember.HomeDirectory)) Then   
59.
            HomeDirectory = objMember.HomeDirectory   
60.
        Else   
61.
            HomeDirectory = "" 
62.
        End If  
63.
        If Not(IsEmpty(objMember.ScriptPath)) Then 
64.
            LoginScript = objMember.ScriptPath 
65.
        Else   
66.
            LoginScript = ""   
67.
        End If  
68.
 
69.
        ' ab jetzt stehen alle oben ausgelesenen Werte in den entsprechenden Variablen zur Verfügung 
70.
		 
71.
        'Datensatz zusammenstellen, im Original Komma als Trennzeichen, in der adaptierten Fassung das oben per Variable festgelegte ";" 
72.
        ' Original-Zeile:  
73.
        strText1 = SamAccountName & "," & CN & "," & FirstName & "," & LastName & "," & UserPrincipalName & _  
74.
            "," & ProfilePath & "," & HomeDrive & "," & HomeDirectory & "," & LoginScript 
75.
        ' adaptiert: 
76.
        strText1 = SamAccountName & Delim & CN & Delim & FirstName & Delim & LastName & Delim & UserPrincipalName & _  
77.
            Delim & ProfilePath & Delim & Homedrive & Delim & HomeDirectory & Delim & LoginScript 
78.
	 
79.
        'WScript.Echo strText1 ' Ausgabe des Datensatzes in der Konsole (wenn über "cscript" gestartet; zu empfehlen) oder als MsgBox  
80.
  
81.
        Set objTextFile = objFSO.OpenTextFile(Zieldatei, ForAppending, True) ' Textdatei zum Anfügen (des neuen Satzes / der neuen Zeilen) öffnen 
82.
        objTextFile.WriteLine(strText1) ' Datensatz in Textdatei schreiben und 
83.
 
84.
        '### hier Deinen Ausgabecode als Ersatz für die einzeilige Version mit strText1 platzieren, also etwa: 
85.
        'objTextFile.WriteLine objMember.ADSPath 
86.
        'objTextFile.WriteLine 
87.
        'objTextFile.WriteLine "CN: " & Cn 
88.
        ' ... 
89.
        ' #### 
90.
 
91.
        objTextFile.Close                ' Zieldatei wieder schließen 
92.
 
93.
    End If   
94.
    
95.
    If objMember.Class = "organizationalUnit" or objMember.Class = "container" Then  ' Ist das Objekt ein Container / eine OU ... 
96.
        enumMembers (objMember)  ' ... das Unterprogramm (rekursiv) aufrufen, um dieses Objekt abzuarbeiten 
97.
    End If   
98.
Next   
99.
End Sub
Aufgrund des "On Error Resume Next" ließen sich die Zeilen der Art
If Not(IsEmpty(objMember.CN)) Then Cn = objMember.CN Else Cn = "" End If
auch auf
Cn = "" : Cn = objMember.CN
vereinfachen.

Grüße
bastla
Bitte warten ..
Mitglied: dabaeuml
26.01.2012 um 09:07 Uhr
Hervorragend, ich glaube genau sowas habe ich gesucht..
Werde mich gleich mal darüberstürzen....


Eine Frage hab ich zumindest schon mal...
Warum nimmst du mal "If Not" und dann mal wieder "If" her??

Gruß
dabaeuml
Bitte warten ..
Mitglied: dabaeuml
26.01.2012 um 09:34 Uhr
Hallo bastla,

Super, habe das Skript bissl abgeändert und es funktioniert so wie ich es haben möchte...

DANKESCHÖÖÖÖN...
Bitte warten ..
Mitglied: bastla
26.01.2012 um 09:50 Uhr
Hallo dabaeuml!
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 ...
heißt dann eben "Wenn der Rückgabewert von objMember.CN nicht leer ist" oder, einfacher, wenn objMember.CN einen Rückgabewert liefert, dann ...

Da es keine Funktion "IsFull()" gibt, muss eben nach dem Gegenteil gefragt werden (an doppelte Verneinungen gewöhnt man/frau sich mit der Zeit) ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...