VBS - AD Gruppen auslesen und vergleichen?
Neuling braucht etwas Hilfestellung
Ich möchte mit VBS aus 2 Gruppen auslesen das ich soweit auch schon hinkriege was ich aber nicht weiss, wie kann ich die User der beiden Gruppen dann miteinander vergleichen ob ein User in beiden Gruppen auftaucht.
Mein Skript bisher was nur die Gruppen ausliest.
Für Hilfestellung wäre ich sehr dankbar.
lg
Alex
Ich möchte mit VBS aus 2 Gruppen auslesen das ich soweit auch schon hinkriege was ich aber nicht weiss, wie kann ich die User der beiden Gruppen dann miteinander vergleichen ob ein User in beiden Gruppen auftaucht.
Mein Skript bisher was nur die Gruppen ausliest.
Option Explicit
DIM network, domainname
DIM objGroup1, objGroup2, arrMemberOf1, arrMemberOf2, strMember
DIM i, z, wert
on error resume next
'**************************************************************************************************************
set network = CreateObject("Wscript.Network")
domainname = network.UserDomain
set objGroup1 = GetObject("LDAP://CN=Gruppe1,CN=Users,DC=" &domainname &",DC=test")
objGroup1.GetInfo
set objGroup2 = GetObject("LDAP://CN=Gruppe2,CN=Users,DC=" &domainname &",DC=test")
objGroup2.GetInfo
arrMemberOf1 = objGroup1.GetEx("member")
arrMemberOf2 = objGroup2.GetEx("member")
'**************************************************************************************************************
i = 0
z = 0
For Each strMember in arrMemberOf1
if strmember <> "" THEN
WScript.echo strMember
i = i + 1
end if
Next
For Each strMember in arrMemberOf2
if strmember <> "" THEN
WScript.echo strMember
z = z + 1
end if
Next
wscript.echo "i" &i
wscript.echo "z" &z
Für Hilfestellung wäre ich sehr dankbar.
lg
Alex
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 98259
Url: https://administrator.de/contentid/98259
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo berginet und willkommen im Forum!
Ungetestet etwa so:
Durch das Zusammenfassen der in Gruppe 2 befindlichen User in einen String kann anstelle einer Schleife über alle User einfach mit "InStr()" gesucht weden. Damit keine Teilstrings gefunden werden (zB "bauer" in "unterbauer") wird jeder Username durch "#" begrenzt.
Weitere Alternative zu der beschriebenen Vorgangsweise: Ein "dictionary" aufbauen ...
Grüße
bastla
[Edit] In Zeile 24 auf "arrMemberOf2" korrigiert [/Edit]
Ungetestet etwa so:
Option Explicit
DIM network, domainname
DIM objGroup1, objGroup2, arrMemberOf1, arrMemberOf2, strMember, strG2
on error resume next
'**************************************************************************************************************
set network = CreateObject("Wscript.Network")
domainname = network.UserDomain
set objGroup1 = GetObject("LDAP://CN=Gruppe1,CN=Users,DC=" &domainname &",DC=test")
objGroup1.GetInfo
set objGroup2 = GetObject("LDAP://CN=Gruppe2,CN=Users,DC=" &domainname &",DC=test")
objGroup2.GetInfo
arrMemberOf1 = objGroup1.GetEx("member")
arrMemberOf2 = objGroup2.GetEx("member")
'**************************************************************************************************************
strG2 = "#" & Join(arrMemberOf2, "#") & "#"
For Each strMember in arrMemberOf1
If strMember <> "" THEN
If InStr(strG2, "#" & strMember & "#") > 0 Then WScript.Echo strMember
End If
Next
WScript.Echo "Anzahl Gruppe 1: " & CStr(UBound(arrMemberOf1))
WScript.Echo "Anzahl Gruppe 2: " & CStr(UBound(arrMemberOf2))
Weitere Alternative zu der beschriebenen Vorgangsweise: Ein "dictionary" aufbauen ...
Grüße
bastla
[Edit] In Zeile 24 auf "arrMemberOf2" korrigiert [/Edit]
Moin Moin
Du muss Deine beiden For-next schleifen schachteln.
Etwa so:
Gruß L.
Du muss Deine beiden For-next schleifen schachteln.
Etwa so:
...
For Each strMember1 in arrMemberOf1
if strmember1 <> "" THEN
For Each strMember2 in arrMemberOf2
if strmember2 <> "" THEN
If strmember1 = strmember2 Then
wscript.echo strmember1 & " ist in beiden Gruppen vorhanden."
end if
end if
Next
end if
Next
...
Gruß L.
Hallo berginet!
Bei der Variante "dictionary" würden die Zeilen ab 24 etwa so aussehen:
Eigentlich ist ein "dictionary" dazu gedacht, Wertepaare (bestehend aus Schlüssel und zugeordnetem Wert) aufzunehmen - da hier aber nur der Schlüssel (bzw dessen allfälliges Vorhandensein) interessiert, wird als Wert jeweils ein Leerstring zugewiesen.
Doku: http://msdn.microsoft.com/en-us/library/x4k5wbx4(VS.85).aspx
Grüße
bastla
Kann es aber sein, dass bei StrG2 die arrMemberOf2 nicht 1 zusamengefasst werden müssen?
Es kann nicht sein, sondern muss - sorry, war falsch ...Bei der Variante "dictionary" würden die Zeilen ab 24 etwa so aussehen:
Set d2 = CreateObject("Scripting.Dictionary")
d2.CompareMode = vbTextCompare
For Each strMember In arrMemberOf2
d2.Add strMember, ""
Next
For Each strMember In arrMemberOf1
If d2.Exists(strMember) Then WScript.Echo strMember
Next
Doku: http://msdn.microsoft.com/en-us/library/x4k5wbx4(VS.85).aspx
Grüße
bastla