Abfangen eines Fehler beim Anlegen eines Users im AD
Morgen Admin-Genossen
hab da ein Problem und weiss nicht so recht wie ich es lösen soll. Vielleicht hat einer von euch ne Idee die mich weiterbringt
Ich hab ein script was User im AD anlegt, hab aber folgendes Problem:
Wenn man das Script 1.mal ausführt wird alles wunderbar angelegt, Ordner Gruppen Benutzer usw.
Führt man das Script ein 2. mal aus, so kommt die
"Das Objekt ist bereits Vorhanden"
Ja klar, der Benutzer wurde ja auch schon beim ersten Mal angelegt.
Gibt es irgendeine Möglichkeit diesen fehler abzufangen und Quasi das zu Überspringen und zum Nächsten User zu gehen und Ihn anzulegen?
desweitern Wird ja auch noch der ordner für denn benutzer angelegt, dort ist das selbe Problem, zwar wird der bestehende Ordner nicht gelöscht (soll auch nicht gelöscht werden) aber das Script haut dort auch ne Fehlermeldung raus, dass das Objekt bereits Existiert.
so sieht mein Script aus:
meine überlegung war es einfach das Mit ON ERROR RESUME NEXT abzufangen, aber das klappt leider nicht so. Desweiter wollte ich ne MSGBOX blabla sagen lassen um denn Script benutzer mitzuteilen, dass der User/ Ordner bereits existiert.
so in etwa dachte ich es mir bei dem Ordner Fehler
hat einer vone uch vielleicht ne Idee oder nen Vorschlag der mich weiter bringen würde?
für hilfe wäre ich Dankbar
gruß
koluschkiB
hab da ein Problem und weiss nicht so recht wie ich es lösen soll. Vielleicht hat einer von euch ne Idee die mich weiterbringt
Ich hab ein script was User im AD anlegt, hab aber folgendes Problem:
Wenn man das Script 1.mal ausführt wird alles wunderbar angelegt, Ordner Gruppen Benutzer usw.
Führt man das Script ein 2. mal aus, so kommt die
"Das Objekt ist bereits Vorhanden"
Ja klar, der Benutzer wurde ja auch schon beim ersten Mal angelegt.
Gibt es irgendeine Möglichkeit diesen fehler abzufangen und Quasi das zu Überspringen und zum Nächsten User zu gehen und Ihn anzulegen?
desweitern Wird ja auch noch der ordner für denn benutzer angelegt, dort ist das selbe Problem, zwar wird der bestehende Ordner nicht gelöscht (soll auch nicht gelöscht werden) aber das Script haut dort auch ne Fehlermeldung raus, dass das Objekt bereits Existiert.
so sieht mein Script aus:
Option Explicit
'Variablen des gesamten Scripts werden hier in diesen 3 Zeilen Deklariert
Dim OU, objDomain, objOU, objUser, objGroup, WsHShell, CMD
Dim fso, f, Zeile, Feld, Vorname, Nachname, Abteilung, i, Passwort, Abfall
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1
'Organisationseinheit im AD wird gesetzt (benutzer)
OU = "cn=users,dc=testad,dc=int"
Set objOU = GetObject("LDAP://" & OU)
'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe
Dim File_Share
File_Share = 0
Dim MAXIMUM_CONNECTIONS
MAXIMUM_CONNECTIONS = 25
'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
'Die Datei mit allen Benutzerangaben wird geladen
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:\user.csv",1,0)
'1.Zeile der .csv Datei wird Übersprungen
Abfall = f.Readline ' also die 1. Zeile
Do while not f.AtEndOfStream 'statt AtEndOfLine
'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet
Zeile = f.readLine
Feld = split(Zeile,";")
Vorname = Feld(0)
Nachname = Feld(1)
Abteilung = Feld(2)
' Gruppen werden in Schleife direkt angesprochen
' Gruppe1 = Feld(3)
' Gruppe2 = Feld(4)
' Gruppe3 = Feld(5)
' Gruppe4 = Feld(6)
' Gruppe5 = Feld(7)
'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%"
Passwort = LCase(passwort)
'Infos für das AD, die dem User in den AD EIgenschaften zugeordnet werden
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname)
objUser.Put "sAMAccountName", Nachname
objUser.Put "displayName", Vorname & " " & Nachname
objUser.Put "givenName", Vorname
objUser.Put "sn", Nachname
objUser.Put "description", Abteilung
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int"
objUser.SetInfo
objUser.SetPassword Passwort
objUser.Put "userAccountControl", 544
objUser.Put "pwdLastSet", 0
objUser.SetInfo
'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet
For i = 3 To 7 'alle Gruppen bearbeiten
If Feld(i) <> "" Then
If GroupExists(Feld(i), objOU) Then
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU)
Else
Set objGroup = objOU.Create("Group", "cn=" & Feld(i))
objGroup.Put "sAMAccountName", Feld(i)
objGroup.SetInfo
End If
objGroup.Add objUser.ADSPath
End If
Next
'Ordner werden für denn Benutzer angelegt, dabei wird der Nachname als Ordnername verwendet
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname)
errReturn = objNewShare.Create _
("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _
MAXIMUM_CONNECTIONS, "Benutzerordner")
'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt
Set WshShell = WScript.CreateObject("WScript.Shell")
'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll)
PermL1 = "Administratoren:F " & Nachname & ":F"
CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1
WshShell.Run CMD, 0, 1
Loop
'Function für die Erstellung der Gruppen
Function GroupExists(Group, OU)
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen
OU.Filter = Array("group")
'Default: Gruppe noch nicht vorhanden
GroupExists = False
'Alle in der OU enthaltenen Gruppen durchgehen
For Each objGroup in OU
'klein geschriebenen Gruppennamen der betrachteten Gruppe
'mit klein geschriebenem übergebenen Gruppennamen vergleichen
If LCase(objGroup.sAMAccountName) = LCase(Group) Then
'bei Übereinstimmung gibt es die Gruppe bereits ...
GroupExists = True
'... und es müssen die weiteren Gruppen nicht mehr geprüft werden
Exit For
End If
Next
End Function
meine überlegung war es einfach das Mit ON ERROR RESUME NEXT abzufangen, aber das klappt leider nicht so. Desweiter wollte ich ne MSGBOX blabla sagen lassen um denn Script benutzer mitzuteilen, dass der User/ Ordner bereits existiert.
so in etwa dachte ich es mir bei dem Ordner Fehler
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname)
If ObjFolderExists Then
Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!")
AND
On Error Resume Next
end if
hat einer vone uch vielleicht ne Idee oder nen Vorschlag der mich weiter bringen würde?
für hilfe wäre ich Dankbar
gruß
koluschkiB
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144284
Url: https://administrator.de/contentid/144284
Ausgedruckt am: 15.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo
Möglichkeit 1
hinter jedem ein 1>nul 2>nul
Möglichkeit 2
Script 2 das Script 1 aufruft mit 1>nul 2>nul
Möglichkeit 3
Script 2 das Script 1 aufruft mit >> text.txt
Bei Möglichkeit 2 und 3 werden keine echos, rems oder ähnliches Ausgegeben
Gruss
Switcher
Möglichkeit 1
hinter jedem ein 1>nul 2>nul
Möglichkeit 2
Script 2 das Script 1 aufruft mit 1>nul 2>nul
Möglichkeit 3
Script 2 das Script 1 aufruft mit >> text.txt
Bei Möglichkeit 2 und 3 werden keine echos, rems oder ähnliches Ausgegeben
Gruss
Switcher
Hallo koluschki!
so in etwa muss es aussehen, damit du die Sache mit bestehendem Ordner in den Griff bekommst...
btw: was switcher94 betrifft bezieht sich auf den implementierten batch-Teil
lg
so in etwa muss es aussehen, damit du die Sache mit bestehendem Ordner in den Griff bekommst...
Set fso = CreateObject("Scripting.FileSystemObject") 'das steht bei dir schon irgendwo, also nicht miteinbaun!!!
IF fso.FolderExists("C:\Freigaben\" & Nachname) then
Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!")
Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname)
ELSE
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname)
END IF
btw: was switcher94 betrifft bezieht sich auf den implementierten batch-Teil
lg
Hallo!
Probier mal (ungetestet):
PS: ich bin begeistert!!! Du hast Deinen Code eingerückt!!! Weltklasse
Alles Gute weiterhin!!!
Falls Du mal an Deinen Kenntnissen zweifeln solltest:
Schau einfach mal Deinen ersten Beitrag an...
Die Differenz Deiner Kenntnisse und Deiner Herangehensweise an das Problem ist atemraubend!
lg
Edi
Probier mal (ungetestet):
set objUser = GetobjUser("user", "CN=" & Vorname & " " & Nachname)
If exists objUser Then
Msgbox = ("Der User "&Nachname&" existiert bereits!")
else
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname)
objUser.Put "sAMAccountName", Nachname
objUser.Put "displayName", Vorname & " " & Nachname
objUser.Put "givenName", Vorname
objUser.Put "sn", Nachname
objUser.Put "description", Abteilung
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int"
objUser.SetInfo
objUser.SetPassword Passwort
objUser.Put "userAccountControl", 544
objUser.Put "pwdLastSet", 0
objUser.SetInfo
end if
PS: ich bin begeistert!!! Du hast Deinen Code eingerückt!!! Weltklasse
Alles Gute weiterhin!!!
Falls Du mal an Deinen Kenntnissen zweifeln solltest:
Schau einfach mal Deinen ersten Beitrag an...
Die Differenz Deiner Kenntnisse und Deiner Herangehensweise an das Problem ist atemraubend!
lg
Edi