AD-Gruppen eine AD-Benutzers per Script auslesen
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?
Wie kann ich das jetzt erweitern, ich trau mich gar nicht euch den letzten Test Code zu zeigen ;)
Gruß Alecane
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?
Const FOR_APPENDING = 8
set objgroup = GetObject ("LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(".\liste.txt", FOR_APPENDING, True)
for each objMember in objGroup.Members
objFile.WriteLine(objMember.sAMAccountName) & "" & (objMember.Name)
next
objFile.Close
Wie kann ich das jetzt erweitern, ich trau mich gar nicht euch den letzten Test Code zu zeigen ;)
Gruß Alecane
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159654
Url: https://administrator.de/forum/ad-gruppen-eine-ad-benutzers-per-script-auslesen-159654.html
Ausgedruckt am: 11.05.2025 um 12:05 Uhr
11 Kommentare
Neuester Kommentar
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
Andere waren schon fleißig
Allgemeine Beispielscripts für VBScript: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b4cb2678-da ...
Grüße
bastla
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
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?
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
set objgroup = GetObject ("LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(".\liste.txt", FOR_APPENDING, True)
for each objMember in objGroup.Members
objFile.WriteLine(objMember.sAMAccountName) & "" & (objMember.Name)
set objUser = GetObject ("LDAP://CN=objMember.blablabal,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
for each objUsergruppe in objUser.blablabla
blablabla
next
next
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?
Hallo Alecane!
zu erzeugen, sollte das Ergebnis erfreulicher aussehen ... 
Noch als Nachtrag:
Grüße
bastla
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 mitSet objUser = GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)
Noch als Nachtrag:
Const ADS_UF_ACCOUNTDISABLE = 2
If Not objUser.userAccountControl AND ADS_UF_ACCOUNTDISABLE Then WScript.Echo "User aktiv"
bastla
Hallo Alecane!
Soeben erfrolgreich getestet:
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
Soeben erfrolgreich getestet:
Const ListFile = "D:\liste.txt"
Const Delim = ";"
Const FOR_APPENDING = 8
Set objgroup = GetObject ("LDAP://CN=BLA,OU=BLA,OU=BLA,OU=BLA,DC=BLA,DC=BLA,DC=BLA,DC=DE")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(ListFile, FOR_APPENDING, True)
For Each objUser In objGroup.Members
UserInfo = objUser.sAMAccountName & Delim & objUser.Name
Set colGroups = objUser.Groups
For Each objGroup in colGroups
UserInfo = UserInfo & Delim & objGroup.CN
GetNested(objGroup)
Next
objFile.WriteLine UserInfo
next
objFile.Close
Function GetNested(objGroup)
On Error Resume Next
colMembers = objGroup.GetEx("memberOf")
For Each strMember in colMembers
strPath = "LDAP://" & strMember
Set objNestedGroup = _
GetObject(strPath)
WScript.Echo objNestedGroup.CN
GetNested(objNestedGroup)
Next
End Function
Grüße
bastla
Hallo Alecane!
Dann werden nur die Mitglieder dieser (einen) Gruppe (ab Zeile 10) einzeln betrachtet ...

Grüße
bastla
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