Top-Themen

Aktuelle Themen (A bis Z)

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

gelöst AD-Gruppen eine AD-Benutzers per Script auslesen

Mitglied: Alecane

Alecane (Level 1) - Jetzt verbinden

28.01.2011 um 11:52 Uhr, 11059 Aufrufe, 11 Kommentare

Hallo Community ;)

Ich habe von einem Arbeitskollegen den Auftrag bekommen mich mal mit VBS Scripten und Active Directory auseinander zu setzen, weil ich ja so toll Linux Scripten kann, der faule hund ;)

Auftrag: Ich möchte von einer OU des Active Directory alle vorhanden Benutzer auslesen, am besten nur die Aktivierten, danach soll von jedem Benutzer die Gruppen ausgelesen werden, das ganze soll in eine Text-Datei geschrieben werden.

Die Benutzer kann ich schon erfolgreich auslesen, zwar auch die deaktivierten, aber besser als nix. Doch ich komme einfach nicht weiter, wie kann ich von den einzelnen Benutzer die ganzen Gruppen auslesen und auch in die Text-Datei schreiben?

01.
Const FOR_APPENDING = 8
02.

03.
set objgroup = GetObject ("LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
04.

05.
Set objFSO = CreateObject("Scripting.FileSystemObject")
06.
Set objFile = objFSO.OpenTextFile(".\liste.txt", FOR_APPENDING, True)
07.

08.
for each objMember in objGroup.Members
09.
objFile.WriteLine(objMember.sAMAccountName) & "" & (objMember.Name)
10.
next
11.
objFile.Close
Wie kann ich das jetzt erweitern, ich trau mich gar nicht euch den letzten Test Code zu zeigen ;)

Gruß Alecane
Mitglied: bastla
28.01.2011 um 12:20 Uhr
Hallo Alecane und willkommen im Forum!

Andere waren schon fleißig , zB die Scripting Guys oder R.L. Mueller

Allgemeine Beispielscripts für VBScript: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b4cb2678-da ...

Grüße
bastla
Bitte warten ..
Mitglied: Alecane
28.01.2011 um 12:25 Uhr
Erstmal danke, aber wird dafür soviel Code benötigt?

Wenn ich folgenden Code Versuche Auszuführen, bekomme ich eine Fehlermeldung:

01.
Set colGroups = objUser.Groups
02.
For Each objGroup in colGroups
03.
    Wscript.Echo objGroup.CN
04.
    GetNested(objGroup)
05.
Next
06.
Function GetNested(objGroup)
07.
    On Error Resume Next
08.
    colMembers = objGroup.GetEx("memberOf")
09.
    For Each strMember in colMembers
10.
        strPath = "LDAP://" & strMember
11.
        Set objNestedGroup = _
12.
        GetObject(strPath)
13.
        WScript.Echo objNestedGroup.CN
14.
        GetNested(objNestedGroup)
15.
    Next
16.
End Function
Fehlermeldung:
Zeile 2
Zeichen 1
Das Objekt unterstüzt diese Methode nicht: objUser.Groups
Code: 800A01B6
Bitte warten ..
Mitglied: BigWim
28.01.2011 um 12:30 Uhr
Hallo Alecane,

vorneweg die schlechte Nachricht: VBS und LDAP ist nicht meiner Welt, aber:

Wenn Du Dir mal die Hilfe von dsget user /? ansiehst, wirst Du feststellen, dass es einen Parameter (= Eigenschaft für die LDAP-Abfrage) gibt, der das aussortieren kann (-disabled).

Desweiteren bin ich der Überzeugung, um an die Gruppenmitgliedschaften zu kommen, muß Du das Userobjekt im Zugriff nehmen, um darüber an die Gruppenmitgliedschaften zu kommen.

Viel Erfolg
Markus

01.
set objgroup = GetObject ("LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
02.

03.
Set objFSO = CreateObject("Scripting.FileSystemObject")
04.
Set objFile = objFSO.OpenTextFile(".\liste.txt", FOR_APPENDING, True)
05.

06.
for each objMember in objGroup.Members
07.
objFile.WriteLine(objMember.sAMAccountName) & "" & (objMember.Name)
08.

09.
set objUser = GetObject ("LDAP://CN=objMember.blablabal,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
10.
for each objUsergruppe in objUser.blablabla
11.
blablabla
12.
next
13.
next
14.
objFile.Close

NS: Das blabla ist nicht bös gemeint, ich weiß nur die Syntax nicht.
In der Konsole kämst Du mit diesen Befehlen ans Ziel:

dsquery group /user
dsget group / user

Edit:
Boah, sitzt Ihr eigentlich vor dem Webserver? Warum geht das immer so schnell?
Bitte warten ..
Mitglied: bastla
28.01.2011 um 12:32 Uhr
Hallo Alecane!

Du beziehst Dich vermutlich auf die (von mir zuerst verlinkte) Version von R.L. Mueller - die Antwort ist:

Natürlich nicht, wenn Du auf Dokumentation und das wenige, was VBS an "Benutzeroberfläche" und Errorhandling zu bieten hast, verzichten kannst ...

Grüße
bastla
Bitte warten ..
Mitglied: Alecane
28.01.2011 um 12:37 Uhr
Danke euch, ich werd dann mal am Wochende rum spielen ;)

Ich gebe auch dann am Montag eine Rückmeldung.
Bitte warten ..
Mitglied: bastla
28.01.2011 um 12:39 Uhr
Hallo Alecane!
Wenn ich folgenden Code Versuche Auszuführen, bekomme ich eine Fehlermeldung:
Wenn Du Dich noch entschließen könntest, vor Zeile 1 ein Objekt "objUser" - und sei es zu Testzwecken nur ganz einfach der angemeldete Benutzer mit
Set objUser = GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)
zu erzeugen, sollte das Ergebnis erfreulicher aussehen ...
Noch als Nachtrag:
01.
Const ADS_UF_ACCOUNTDISABLE = 2
02.
If Not objUser.userAccountControl AND ADS_UF_ACCOUNTDISABLE Then WScript.Echo "User aktiv"
Grüße
bastla
Bitte warten ..
Mitglied: Alecane
31.01.2011 um 07:25 Uhr
Guten Morgen,

sorry, den "GetObjekt" hatte ich bereits drin, vorher nur raus kopiert, warum auch immer ;)
Ich bekomme immer eine Fehlermeldung die mir sagt das folgende Methode nicht unterstüzt wird.

01.
Set colGroups = objUser.Groups
Gruß Alecane
Bitte warten ..
Mitglied: bastla
31.01.2011 um 08:38 Uhr
Hallo Alecane!

Soeben erfrolgreich getestet:
01.
Const ListFile = "D:\liste.txt"
02.
Const Delim = ";"
03.
Const FOR_APPENDING = 8
04.

05.
Set objgroup = GetObject ("LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
06.

07.
Set objFSO = CreateObject("Scripting.FileSystemObject")
08.
Set objFile = objFSO.OpenTextFile(ListFile, FOR_APPENDING, True)
09.

10.
For Each objUser In objGroup.Members
11.
    UserInfo = objUser.sAMAccountName & Delim & objUser.Name
12.
    Set colGroups = objUser.Groups
13.
    For Each objGroup in colGroups
14.
        UserInfo = UserInfo & Delim & objGroup.CN
15.
        GetNested(objGroup)
16.
    Next
17.
    objFile.WriteLine UserInfo
18.
next
19.
objFile.Close
20.

21.
Function GetNested(objGroup)
22.
    On Error Resume Next
23.
    colMembers = objGroup.GetEx("memberOf")
24.
    For Each strMember in colMembers
25.
        strPath = "LDAP://" & strMember
26.
        Set objNestedGroup = _
27.
        GetObject(strPath)
28.
        WScript.Echo objNestedGroup.CN
29.
        GetNested(objNestedGroup)
30.
    Next
31.
End Function
Dass damit nicht, wie von Dir beschrieben, die Benutzer einer bestimmten OU, sondern die Mitglieder einer vorgegebenen Gruppe aufgelistet werden, sei nur am Rande angemerkt ...

Grüße
bastla
Bitte warten ..
Mitglied: Alecane
31.01.2011 um 10:12 Uhr
Hi und danke für deine mühe ;)

Das Script Funktioniert aufjedenfall, aber könntest du mir vielleicht erklären was genau passiert?

Also ich verstehe es so, das Script sucht in meiner angegebenen OU die Gruppen und deren aktivierten benutzer herraus?

Gruß Alecane
Bitte warten ..
Mitglied: bastla
31.01.2011 um 10:40 Uhr
Hallo Alecane!
das Script sucht in meiner angegebenen OU die Gruppen
Nein - Du gibst ja eine konkrete Gruppe (mit "LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE") an; die Gruppe heißt "1. BLA" und befindet sich in der OU "2. Bla", welche eine Unter-OU der OU "3. BLA" ist, etc ...
Dann werden nur die Mitglieder dieser (einen) Gruppe (ab Zeile 10) einzeln betrachtet ...
und deren aktivierten benutzer herraus?
Bisher ist die Unterscheidung zwischen aktiven und deaktivierten Benutzern noch nicht eingebaut - ich wollte Dir ja auch noch Gelegenheit zu eigener Leistung lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: Alecane
31.01.2011 um 10:42 Uhr
Jetzt habe ich es durch das testen heraus gefunden, sehr vielen Dank.

Ich werd mich dann mal daran setzen und wieder antworten wenn ich eine Lösung habe ;)

EDIT: So funktioniert es mit den aktieven/deaktiven Benutzern, kann ich den Code auch so stehen lassen, oder gibt es noch was zu bemängeln?

01.
Const ListFile = ".\GPO-Test-Aktive-Benutzer.txt"
02.
Const Delim = ";"
03.
Const FOR_APPENDING = 8
04.
Const ADS_UF_ACCOUNTDISABLE = 2
05.

06.
Set objgroup = GetObject ("LDAP://Bla...")
07.

08.
Set objFSO = CreateObject("Scripting.FileSystemObject")
09.
Set objFile = objFSO.OpenTextFile(ListFile, FOR_APPENDING, True)
10.

11.
For Each objUser In objGroup.Members
12.
	If Not objUser.userAccountControl AND ADS_UF_ACCOUNTDISABLE Then
13.
    		UserInfo = objUser.sAMAccountName & Delim & objUser.Name
14.
    		Set colGroups = objUser.Groups
15.
    		For Each objGroup in colGroups
16.
        	UserInfo = UserInfo & Delim & objGroup.CN
17.
        	GetNested(objGroup)
18.
  		Next
19.
	    objFile.WriteLine UserInfo
20.
	End if
21.
next
22.
objFile.Close
23.

24.
WScript.Echo "Fertig"
25.

26.
Function GetNested(objGroup)
27.
    On Error Resume Next
28.
    colMembers = objGroup.GetEx("memberOf")
29.
    For Each strMember in colMembers
30.
        strPath = "LDAP://" & strMember
31.
        Set objNestedGroup = _
32.
        GetObject(strPath)
33.
        REM WScript.Echo objNestedGroup.CN
34.
        GetNested(objNestedGroup)
35.
    Next
36.
End Function
Gruß Alecane
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershellskript um AD-Gruppenmitgliedschaften eines Benutzers auf einen anderen anzupassen

gelöst Frage von igetyaallBatch & Shell1 Kommentar

Hallo Administratoren, folgender Wunsch: Ich möchte ein Skript schreiben, welches die AD-Gruppen eines Users ausliest, diese Ausgabe als Grundlage ...

Windows Netzwerk

Sharepoint 2010 - E-mail-Adresse eines Benutzers aus AD übertragen

Frage von Alex94GWindows Netzwerk2 Kommentare

Hallo zusammen, vorweg: Ich bin kein Sharepoint-Admin. Unser bis dato zuständiger Admin hat uns verlassen und bevor ich während ...

Batch & Shell

Per Script Laufzeit PC im AD hgerausfinden

Frage von 14634Batch & Shell6 Kommentare

Hallo zusammen, kurz zur Infrastruktur;: AD: Windows Server 2012R2 Clients: W7 32bit ich würde gerne über das komplette AD ...

Windows Server

Azure AD ohne lokale AD möglich ?

Frage von SoccerdeluxWindows Server2 Kommentare

Hallo zusammen, aktuell beschäftige ich mich ein wenig mit Azure AD. Blog Aktuell nutze ich schon Office 365 und ...

Neue Wissensbeiträge
Viren und Trojaner

Staatstrojaner soll auch per Einbruch installiert werden können

Information von transocean vor 1 TagViren und Trojaner2 Kommentare

Moin, Bundesinnenminister Horst Seehofer will dem Verfassungsschutz Wohnungseinbrüche erlauben, um den geplanten Staatstrojaner zu installieren. Gruß Uwe

Windows 7
Win7 Update scheitert KB4512506
Information von infowars vor 1 TagWindows 7

Falls jemand auch das Problem hat mit dem: Monatliches Sicherheitsqualitätsrollup für Windows 7 für x64-basierte-Systeme (KB4512506) Das scheint mit ...

Humor (lol)
Wenn hacken nach hinten los geht
Information von em-pie vor 2 TagenHumor (lol)5 Kommentare

Moin, weil heute Freitag ist, nachfolgender kurzer Artikel zum schmunzeln:) l+f: NULL ist ein notorischer Falschparker

Windows Update
Windows: August 2019 Patchday-Probleme
Information von kgborn vor 3 TagenWindows Update3 Kommentare

Ich kippe mal einige kurze Informationen hier rein - vielleicht hilft es Betroffenen. Die August 2019-Updates für Windows haben ...

Heiß diskutierte Inhalte
Switche und Hubs
Glasfaser-Anschluss Telekom muss verteilt werden
Frage von cansoniSwitche und Hubs28 Kommentare

Vorweg: Bin nur Anwender und kein Experte Die Situation: Der Vermieter stellt einen Glasfaseranschluss in der Wohnung bereit. Wir ...

Ubuntu
Download manchmal langsam oder komplette Abbrüche bzw. Videos spielen nicht bis zum Schluss
Frage von stefanstpUbuntu17 Kommentare

Immer wieder berichten unsere Kunden, dass Downloads abbrechen oder super langsam sind oder Videos nicht abgespielt werden können bzw. ...

Hyper-V
VMs von Hyper-V auf externer Festplatte
Frage von SnowbirdHyper-V17 Kommentare

Hallo, ich möchte gerne von VirtualBox auf Hyper-V umsteigen und würde auch gerne weiterhin meine VMs auf der externen ...

Festplatten, SSD, Raid
SSDs durch Lagerung ohne Strom nach 6 Monaten defekt?!?
gelöst Frage von GlobetrotterFestplatten, SSD, Raid15 Kommentare

Moin Gemeinde Ich hatte gerade nen Trauerspiel Habe hier etliche NAS-Geräte herumfahren welche ich mal auf die Seite gelegt ...