andistroebi
Goto Top

VBScript - prüfen ob Benutzer - Computer Mitglied einer Gruppe ist

Hallo,

ich habe mir vor kurzem ein Script gebastelt mit dem ich über das AD bestimmen kann welcher Benutzer/Computer welchen Drucker automatisch bekommt. Funktioniert auch alles perfekt.

Ich habe jetzt im AD Gruppen die den selben Namen haben wie die Drucker und die Mitglieder der Gruppen bekommen die Drucker automatisch verbunden.

Nun habe ich eben das Problem das ich Abteilungsdrucker habe, die allen Computern einer Abteilung zugeordnet werden müssen. Jetzt würde ich gerne in die Druckergruppe als Mitglied weitere Gruppen hinzufügen (z.B. Abteilung-Buchhaltung).

Jetzt ist meine Frage, wie finde ich mit VBScript herraus ob ein Benutzer/Computer Mitglied einer Gruppe ist, auch wenn er nicht direkt in der Gruppe steht, sondern sich in weiteren Untergruppen versteckt?

Beispiel


->Drucker1
--->User1
--->User2
--->Gruppe1
>User3
>User4

Wie finde ich in diesem Beispiel heraus ob User 3 & 4 Mitglieder sind von Drucker1?


Gruß Andi

Content-ID: 188462

Url: https://administrator.de/forum/vbscript-pruefen-ob-benutzer-computer-mitglied-einer-gruppe-ist-188462.html

Ausgedruckt am: 24.12.2024 um 02:12 Uhr

bioperiodik
bioperiodik 23.07.2012 um 15:15:28 Uhr
Goto Top
Moin,

Muss es unbedingt VB sein?

Evtl. wäre Kix32 was für dich?
bastla
bastla 23.07.2012 um 17:54:00 Uhr
Goto Top
Hallo AndiStroebi!

Schau Dir mal den "Scripting Guy"-Artikel "Determining a User’s Group Memberships" an ...

Grüße
bastla
eazy-isi
eazy-isi 24.07.2012 um 07:43:48 Uhr
Goto Top
Servus,

also ich nutze: http://www.faq-o-matic.net/2011/07/06/jos-version-3-1/ und übergebe das ganze dann an Excel bzw. starte es schon aus Excel heraus.

Gruß
eazy_isi
AndiStroebi
AndiStroebi 24.07.2012 um 13:53:43 Uhr
Goto Top
Hallo,

@bioperiodik: das Script ist eben schon zu 99% fertig. Da möchte ich ungern auf etwas anderen umschwenken

@bastla: Sie schon mal gut aus. Muss mal schauen ob mich das weiter bringt. Weil wenn ich es bisher richtig verstanden habe wird hier gesucht in welcher Gruppe ein User ist. Ich sollte aber wissen ob ein User ein Mitglied einer bestimmten Gruppe ist. Hört sich zwar fast gleich an, ist aber ein anderer Ansatz.

@eazy_isi: entweder ich habe es noch nicht richtig verstanden oder ist das nur zum Dokumentationen machen? oder meintest du ich soll mal den Quellcode von dem durchschauen?
bastla
bastla 24.07.2012 aktualisiert um 14:03:12 Uhr
Goto Top
Hallo AndiStroebi!
Ich sollte aber wissen ob ein User ein Mitglied einer bestimmten Gruppe ist. Hört sich zwar fast gleich an, ist aber ein anderer Ansatz.
Die (für mich) einfachste Lösung wäre, alle Gruppen mit einem passenden Trennzeichen (zB "#") in einen String (im Beispiel unten Variable "Groups") zu packen - sähe dann etwa so aus:
#Drucker1#Drucker4#Drucker5#
und dann per "InStr()" abzufragen:
If InStr(Groups, "#" & TheGroup & "#") > 0 Then WScript.Echo "ist in Gruppe " & TheGroup
Grüße
bastla
AndiStroebi
AndiStroebi 29.07.2012 um 08:26:36 Uhr
Goto Top
Hi,

leider geht das eben nicht.

Jetzt würde ich herausfinden ob er direkt in einer der Hauptgruppen ist. Das ist eben mein Problem. Ich muss herausfinden ob der Benutzer in einer Untergruppe ist. z.B. Gruppe1 oder sogar Gruppe2.

->Drucker1
--->User1
--->User2
--->Gruppe1
>User3
>User4
>Gruppe2
>User5
bastla
bastla 29.07.2012 um 10:37:58 Uhr
Goto Top
Hallo AndiStroebi!
Jetzt würde ich ...
Hast Du denn noch nicht?
ob er direkt in einer der Hauptgruppen ist
Hast Du Dir den verlinkten Artikel / das Script überhaupt angesehen? Wenn ja, solltest Du eigentlich gemerkt haben, dass es darin genau darum geht, auch verschachtelte ("nested") Gruppen zu berücksichtigen - eine "direkte" Mitgliedschaft bei der Hauptgruppe ist daher nicht nötig ...

Ich muss allerdings zugeben, dass die Scripting Guys ein Leerzeichen vergessen haben face-wink, daher (aber zumindest das Testen überlasse ich Dir):
On Error Resume Next

Set objUser=GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)  
Set colGroups = objUser.Groups
Groups = "#"  
For Each objGroup in colGroups
    Groups = Groups & objGroup.CN & "#"  
    GetNested(objGroup)
Next
If InStr(Groups, "#Drucker1#") > 0 Then WScript.Echo "ist in Gruppe ""Drucker1"""  
If InStr(Groups, "#Drucker2#") > 0 Then WScript.Echo "ist in Gruppe ""Drucker2"""  

Function GetNested(objGroup)
    On Error Resume Next
    colMembers = objGroup.GetEx("memberOf")  
    For Each strMember in colMembers
        strPath = "LDAP://" & strMember  
        Set objNestedGroup = _
        GetObject(strPath)
        Groups = Groups & objGroup.CN & "#"  
        GetNested(objNestedGroup)
    Next
End Function
Grüße
bastla