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-Key: 188462

Url: https://administrator.de/contentid/188462

Printed on: April 19, 2024 at 20:04 o'clock

Member: bioperiodik
bioperiodik Jul 23, 2012 at 13:15:28 (UTC)
Goto Top
Moin,

Muss es unbedingt VB sein?

Evtl. wäre Kix32 was für dich?
Member: bastla
bastla Jul 23, 2012 at 15:54:00 (UTC)
Goto Top
Hallo AndiStroebi!

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

Grüße
bastla
Member: eazy-isi
eazy-isi Jul 24, 2012 at 05:43:48 (UTC)
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
Member: AndiStroebi
AndiStroebi Jul 24, 2012 at 11:53:43 (UTC)
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?
Member: bastla
bastla Jul 24, 2012 updated at 12:03:12 (UTC)
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
Member: AndiStroebi
AndiStroebi Jul 29, 2012 at 06:26:36 (UTC)
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
Member: bastla
bastla Jul 29, 2012 at 08:37:58 (UTC)
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