firepower
Goto Top

per VB-Script pruefen ob eine OU vorhanden ist

Hallo,

habe eine Frage bezüglich Scripting im AD.

Folgendes wollte ich ermöglichen:
Testumgebung:
Ich möchte eine bestimmte Anzahl an User in einer OU erstellen.

Das Script funktioniert auch in soweit, in folgenden Parametern:
input Anzahl User
input OUName

- Domänenname egal
 ("LDAP://RootDSE")   

- wenn OU nicht vorhanden ist, wird diese erstellt
 CREATE("organizationalUnit"; "ou=" & OUName)   

- Anzahl der User wird in dieser OU angelegt
 for i = 1 to Anzahl

CREATE("user", "CN=" & Uservar & ", OU=" & OUName)  
Put "sAMAccountName", "Dummy" & i  

next
Soweit so gut.

Mein Problem besteht nun darin, dass, wenn die OU schon vorhanden ist,
bekomme ich eine Fehlermeldung: Object existiert.

Wenn ich den Fehler übergehe "On Error resume next", erstellt das script
nur neue User, wenn die Anzahl der neu anzulegenden User, die vorhandenen
übersteigt.

Hört sich doof an: Hier ein Beispiel:

Erster Scriptlauf: lege 10 User in OU Test an -> Erfolgreich
Zweiter Ablauf : lege 11 User in OU Test an -> 1 neuer User wird angelegt,
wenn On Error resume next
ansonsten wird mit Fehler abgebrochen.

Dritter Ablauf: lege 20 User in OU Test an -> 9 neue User, usw...

Hat jemand eine Idee wie ich das vorher abfragen kann?

Mit
- if not existsObject hatte ich keinen Erfolg, bzw. hab es nicht hinbekommen.


Hab irgendtwo nicht den Durchblick :D


Hier nochmal das komplette Script im Überblick:
 
On Error Resume Next

dim rootDSE
set rootDSE = GetObject("LDAP://RootDSE")  
domainname=rootDSE.Get("defaultnamingcontext")  

set domain = GetObject("LDAP://" & domainname)  

randomize
Zufallszahl = Int(1000 * rnd + 1)

Anzahl = inputBox("Wie viele User sollen angelegt werden?")  
ZielOU = inputBox("In welcher OU sollen die User angelegt werden?")  

Set objOU = domain.Create("organizationalUnit", "ou=" & ZielOU)  
objOU.SetInfo

For i = 1 To Anzahl
    MUsername = "Dummy" & Zufallszahl & "-" & i  
    Set objLeaf = domain.Create("user", "CN=" & MUsername & ", OU=" & ZielOU)  
    objLeaf.Put "sAMAccountName", "Dummy" & i  
    objLeaf.SetInfo
Next
 
WScript.Echo Anzahl & " Benutzer in " & ZielOU & " erstellt."  

Danke schonmal im Voraus
Heiko

Content-ID: 89655

Url: https://administrator.de/forum/per-vb-script-pruefen-ob-eine-ou-vorhanden-ist-89655.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

bastla
bastla 11.06.2008 um 21:32:58 Uhr
Goto Top
Hallo Firepower!

Lösung über Error-Handling: How to Create an OU (Organizational Unit) with VBScript

Ansonsten als Grundlage: Search for all the OUs with a Specific Word in Their Names

Grüße
bastla
Firepower
Firepower 11.06.2008 um 22:48:58 Uhr
Goto Top
Hallo,

vielen Dank. Das hilft mir schon mal weiter.

Aber ein Problem bleibt. Es werden trotzdem nur neue User erstellt,
wenn die Anzahl der schon vorhandenen User darunter liegt.

Nochmal zum veranschaulichen:
10 User erstellt -> Erfolgreich

Dann will ich 5 neue User anlegen, diese werden aber nicht angelegt.
Lege ich stattdessen 15 neue User an, werden 5 neue User angelegt.

Die Usernamen werden alle mit einer Zufallszahl zwischen 1 und 1000 erstellt,
also doppelte User kann ich ausschliessen.

Noch jemand dazu ne Idee ??

Grüße
Heiko
Firepower
Firepower 11.06.2008 um 23:00:36 Uhr
Goto Top
Hallo nochmal,

ich glaub das war heute zu lange.

Kaum macht man das richtig, gehts auch !! :D:D

Danke für die schnelle Hilfe

Grüße
Heiko
Firepower
Firepower 12.06.2008 um 11:39:50 Uhr
Goto Top
Hallo,
nach einer kurzen Nacht, hier das komplette Script.

Zwar nicht auf die feine Art gelöst, aber so dass es nun so funktioniert wie ich es haben wollte.
Die OU wird immer auf dem Rootlevel der AD erstellt, dabei ist es egal wie die Domäne heißt.

Mein Fehler war, dass bei der Anlage der sAMAccountnamen,
die Zufallszahl nicht mit geschrieben wurde, und daher wurden nur User angelegt
die nicht vorhanden waren.

Aber so geht es erstmal.


On Error Resume Next

dim rootDSE

set rootDSE = GetObject("LDAP://RootDSE")  
domainname=rootDSE.Get("defaultnamingcontext")  
set domain = GetObject("LDAP://" & domainname)  

Anzahl = inputBox("Wie viele User sollen angelegt werden?")  
UName = inputBox("Wie sollen die User heißen?")  
ZielOU = inputBox("In welcher OU sollen die User angelegt werden?")  

Set objOU = domain.Create("organizationalUnit", "ou=" & ZielOU)  
objOU.SetInfo

randomize
Zufallszahl = Int(1000 * rnd + 1)

  For i = 1 To Anzahl
    MUsername = UName & Zufallszahl & "-" & i  
    Set objLeaf = domain.Create("user", "CN=" & MUsername & ", OU=" & ZielOU)  
    objLeaf.Put "sAMAccountName", MUsername & Zufallszahl & "-"  & i  
    objLeaf.SetInfo
  Next

WScript.Echo Anzahl & " Benutzer in " & ZielOU & " erstellt."  

Falls da noch jemand Verbesserungen machen will, kann er mir gerne Bescheid sagen.

Grüße
Heiko