retrodude
Goto Top

Group Nesting per VBS Skript bricht ab

Hallo

Ich möchte mit folgendem Skript, welchen ich stündlich über 2 Gruppen laufen lassen möchte, deren Member sicherstellen. So will ich sicherstellen, dass sich gewisse Gruppen in der entsprechenden Gruppe befinden. Ihr findet das komisch? Wäre es auch, hätten wir nicht eine AD Verwaltungssoftware, welche keine Verschachtelungen erlaubt. Wenn diese Gruppen generiert werden sind unsere manuell hinzugefügten Gruppen wieder raus. Deshalb will ich mit meinem Skript sicherstellen, dass diese speziellen Gruppen automatisch hinzugefügt werden.
Mein Problem ist aber, dass der Skript abbricht, sobald er einen Eintrag gefunden hat, welcher bereits existiert. Was muss ich einbauen, damit er trotzdem jeden Eintrag abbarbeitet?

Adds two groups (Executives and Scientists) and one user account (MyerKen) to the Sea-Users group in Active Directory.


Const ADS_PROPERTY_APPEND = 3

Set objGroup = GetObject _
("LDAP://cn=Man_Gen,cn=Groups,dc=NA,dc=fabrikam,dc=com")

objGroup.PutEx ADS_PROPERTY_APPEND, "member", _
Array("cn=Auto_Gen1,ou=Groups,dc=NA,dc=fabrikam,dc=com", _
"cn=Auto_Gen2,ou=Groups,dc=NA,dc=fabrikam,dc=com", _
"cn=Auto_Gen3,ou=Groups,dc=NA,dc=fabrikam,dc=com")

objGroup.SetInfo


Es ist in der Praxis nie der Fall, dass sämtliche Gruppen rausfallen. Deshalb ist es wichtig, dass das Skript bei einem bereits vorhandenen Gruppeneintrag bis zum Ende weiterfährt. Wäre es sinnvoller für jede hinzuzufügende Gruppe eine IF Schlaufe zu integrieren? Wenn ja, wie würde man das am elegantesten tun?

Gruss

Content-Key: 108716

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

Printed on: April 26, 2024 at 11:04 o'clock

Member: bastla
bastla Feb 12, 2009 at 15:32:36 (UTC)
Goto Top
Hallo RetroDude!

Eigentlich sollte es ja genügen, mit einem "On Error Resume Next" den Fehler zu übergehen - sinnvoll ist dies aber nur, wenn Du versuchst, jede Gruppe einzeln hinzuzufügen, also (ungetestet):
Const ADS_PROPERTY_APPEND = 3

Set objGroup = GetObject _
("LDAP://cn=Man_Gen,cn=Groups,dc=NA,dc=fabrikam,dc=com")  

MyGroups = Array( _
"cn=Auto_Gen1,ou=Groups,dc=NA,dc=fabrikam,dc=com", _  
"cn=Auto_Gen2,ou=Groups,dc=NA,dc=fabrikam,dc=com", _  
"cn=Auto_Gen3,ou=Groups,dc=NA,dc=fabrikam,dc=com")  

On Error Resume Next
For Each Group In MyGroups
    objGroup.PutEx ADS_PROPERTY_APPEND, "member", Array(Group)  
    objGroup.SetInfo
Next
On Error Goto 0
Grüße
bastla
Member: RetroDude
RetroDude Feb 13, 2009 at 07:33:32 (UTC)
Goto Top
Hallo Bastla!

Danke, werde es noch heute ausprobieren. Ich habe nur noch ein kleines Problem. Wie muss ich es machen, wenn ich mehrere Gruppen mit dem Skript modifizieren muss? D. h. diverse Arrays für diverse Gruppen? Einfach diesen Codeblock mehrmals verwenden? Oder ginge dies schlanker bzw. eleganter?

Gruss und Dank

RetroDude
Member: bastla
bastla Feb 13, 2009 at 10:22:02 (UTC)
Goto Top
Hallo RetroDude!
Einfach diesen Codeblock mehrmals verwenden?
Die Zuwesiungen in den Zeilen 3 bis 9 musst Du auf jeden Fall mehrfach vornehmen, die Zeilen 11 bis 16 könntest/solltest Du in ein Unterprogramm auslagern.

Grüße
bastla
Member: RetroDude
RetroDude Feb 13, 2009 at 10:26:37 (UTC)
Goto Top
Du meinst in eine Funktion und diese dann immer aufrufen? Wäre froh, wenn Du mir noch etwas auf die Sprünge helfen könntest... face-smile

Gruss
retrodude
Member: bastla
bastla Feb 13, 2009 at 10:42:27 (UTC)
Goto Top
Hallo RetroDude!
Du meinst in eine Funktion und diese dann immer aufrufen?
Streng genommen ist eine "Function" dadurch gekennzeichnet, dass sie einen Rückgabewert liefert, während ein "Sub" dies nicht tut - aber grundsätzlich: ja.

Das könnte hier so aussehen:
Const ADS_PROPERTY_APPEND = 3

'erste Gruppe  
Set objGroup = GetObject _
("LDAP://cn=Man_Gen,cn=Groups,dc=NA,dc=fabrikam,dc=com")  
MyGroups = Array( _
"cn=Auto_Gen1,ou=Groups,dc=NA,dc=fabrikam,dc=com", _  
"cn=Auto_Gen2,ou=Groups,dc=NA,dc=fabrikam,dc=com", _  
"cn=Auto_Gen3,ou=Groups,dc=NA,dc=fabrikam,dc=com")  
Eintragen 'Aufruf des Unterprogrammes  

' nächste Gruppe  
Set objGroup = GetObject _
("LDAP://cn=Test_Gen,cn=Groups,dc=NA,dc=fabrikam,dc=com")  
MyGroups = Array( _
"cn=Auto_Gen11,ou=Groups,dc=NA,dc=fabrikam,dc=com", _  
"cn=Auto_Gen12,ou=Groups,dc=NA,dc=fabrikam,dc=com")  
Eintragen

' ... and so on.  


Sub Eintragen
On Error Resume Next
For Each Group In MyGroups
    objGroup.PutEx ADS_PROPERTY_APPEND, "member", Array(Group)  
    objGroup.SetInfo
Next
On Error Goto 0
End Sub
Da in VBS alle Variablen "global" sind, müssen "objGroup" und "MyGroups" noch nicht einmal als Argumente übergeben werden.

Grüße
bastla
Member: RetroDude
RetroDude Feb 13, 2009 at 13:18:49 (UTC)
Goto Top
Hei bastla!

Danke, klappt prima!

Grüsse und schönes Wochenende

RetroDude