Ich hab da ein ganz simples Skript das vom User A die Rechte auslesen soll und dann dem User B übergeben soll, damit beide die gleichen Rechte haben. Das klappt auch.
Nun zum Problem:
User A hat die Rechte x, y und z.
User B hat die Rechte w und y.
Nun wenn ich es nun mit dem "ADS_PROPERTY_APPEND" Befehl mache kommt ein Fehler, dass ein Recht schon vorhanden sein (sprich y).
Wenn ich es per "ADS_PROPERTY_UPDATE" mache, verliert ja leider der User A die Rechte und User B hat alle.
Und zuerst die Rechte von User B clearen geht auch nicht, da der noch ein zusätzliches Recht w hat.
Jetzt würd ich natürlich gerne die Rechte vergleichen und nur die Übergeben, die noch fehlen, damit es ohne Fehler abläuft. Da komm ich momentan nicht weiter..
Hier der Ursprüngliche Code ohne Vergleich (funktioniert wenn User B keine Rechte hat/neu angelegt worden ist):
- 'Domäne definieren
- Set ou = GetObject("LDAP://rootDSE")
- 'User einlesen
- usrRead = InputBox("Der Name vom Benutzer, von dem die Rechte ausgelesen werden sollen:","Rechte auslesen","Hans Muster")
- usrWrite = InputBox("Der Name vom Benutzer, der die Rechte bekommt:","Rechte übergeben","Max Muster")
- 'Userrechte auslesen
- Set objRead = GetObject("LDAP://cn=" & usrRead & ",ou=Mitarbeiter,dc=test,dc=local")
- arrGroups = objRead.memberOf
- 'Userrechte schreiben
- Const ADS_PROPERTY_UPDATE = 2
- Const ADS_PROPERTY_APPEND = 3
- For Each strWrite In arrGroups
- Set objGroup = GetObject("LDAP://" & strWrite)
- objGroup.PutEx ADS_PROPERTY_UPDATE, "member", Array("cn=" & usrWrite & ",ou=Mitarbeiter,dc=test,dc=local")
- objGroup.SetInfo
- Next
Habe diesen Code umgestaltet, aber irgendwie will er nicht funktioniern. Er hängt dann beim 20 und sagt "Typen unverträglich: 'UBound'":
- 'Domäne definieren
- Set ou = GetObject("LDAP://rootDSE"
- 'User einlesen
- usrRead = InputBox("Der Name vom Benutzer, von dem die Rechte ausgelesen werden sollen:","Rechte auslesen","Hans Muster")
- usrWrite = InputBox("Der Name vom Benutzer, der die Rechte bekommt:","Rechte übergeben","Max Muster")
- 'Userrechte auslesen
- Set objRead = GetObject("LDAP://cn=" & usrRead & ",ou=Mitarbeiter,dc=test,dc=local")
- arrRead = objRead.memberOf
- Set objWrite = GetObject("LDAP://cn=" & usrWrite & ",ou=Mitarbeiter,dc=test,dc=local")
- arrGroups = objWrite.memberOf
- 'Userrechte vergleichen um Fehler zu vermeiden
- For r = 0 to UBound(arrRead)
- For w = 0 to UBound(arrWrite)
- If arrRead(r) = arrWrite(w) then
- arrGroups = arrRead(r)
- Exit For
- End If
- Next
- Next
- For Each strGroups In arrGroups
- wscript.echo strGroups
- Next
Und ne Frage nebenbei: Momentan muss ich bei den InputBoxen immer den vollen Namen eingeben. Wie kann ich es machen, dass das LDAP das auch mit dem Loginnamen funktioniert?
Edit
Habe es nun anders Lösen können.
Vor der Schleife im Codebeispiel 1 einfügen und dann gehts weiter. So fügt er nur die Gruppen ein, die noch fehlen und geht das dann ohne Unterbrüche durch.