Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Abfangen eines Fehler beim Anlegen eines Users im AD

Frage Entwicklung VB for Applications

Mitglied: koluschkiB

koluschkiB (Level 1) - Jetzt verbinden

07.06.2010 um 11:24 Uhr, 3990 Aufrufe, 8 Kommentare

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:

01.
Option Explicit 
02.
 
03.
'Variablen des gesamten Scripts werden hier in diesen 3 Zeilen Deklariert 
04.
Dim OU, objDomain, objOU, objUser, objGroup, WsHShell, CMD 
05.
Dim fso, f, Zeile, Feld, Vorname, Nachname, Abteilung, i, Passwort, Abfall 
06.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1 
07.
 
08.
'Organisationseinheit im AD wird gesetzt (benutzer) 
09.
OU = "cn=users,dc=testad,dc=int" 
10.
Set objOU = GetObject("LDAP://" & OU) 
11.
 
12.
'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe 
13.
Dim File_Share 
14.
File_Share = 0 
15.
Dim MAXIMUM_CONNECTIONS 
16.
MAXIMUM_CONNECTIONS = 25 
17.
 
18.
 
19.
'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis) 
20.
strComputer = "." 
21.
Set objWMIService = GetObject("winmgmts:" _ 
22.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
23.
Set objNewShare = objWMIService.Get("Win32_Share") 
24.
 
25.
'Die Datei mit allen Benutzerangaben wird geladen 
26.
Set fso = CreateObject("Scripting.FileSystemObject") 
27.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
28.
 
29.
'1.Zeile der .csv Datei wird Übersprungen 
30.
Abfall = f.Readline   ' also die 1. Zeile   
31.
Do while not f.AtEndOfStream       'statt AtEndOfLine 
32.
 
33.
'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet 
34.
Zeile = f.readLine  
35.
Feld = split(Zeile,";") 
36.
Vorname = Feld(0) 
37.
Nachname = Feld(1) 
38.
Abteilung = Feld(2) 
39.
'        Gruppen werden in Schleife direkt angesprochen 
40.
'        Gruppe1 = Feld(3) 
41.
'        Gruppe2 = Feld(4) 
42.
'        Gruppe3 = Feld(5) 
43.
'        Gruppe4 = Feld(6) 
44.
'        Gruppe5 = Feld(7) 
45.
 
46.
 
47.
'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung  
48.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
49.
Passwort = LCase(passwort) 
50.
 
51.
'Infos für das AD, die dem User in den AD EIgenschaften zugeordnet werden 
52.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
53.
objUser.Put "sAMAccountName", Nachname 
54.
objUser.Put "displayName", Vorname & " " & Nachname 
55.
objUser.Put "givenName", Vorname 
56.
objUser.Put "sn", Nachname 
57.
objUser.Put "description", Abteilung 
58.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
59.
objUser.SetInfo 
60.
objUser.SetPassword Passwort 
61.
objUser.Put "userAccountControl", 544 
62.
objUser.Put "pwdLastSet", 0 
63.
objUser.SetInfo 
64.
 
65.
'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet 
66.
For i = 3 To 7 'alle Gruppen bearbeiten 
67.
If Feld(i) <> "" Then 
68.
If GroupExists(Feld(i), objOU) Then 
69.
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
70.
Else 
71.
Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
72.
objGroup.Put "sAMAccountName", Feld(i) 
73.
objGroup.SetInfo 
74.
End If 
75.
objGroup.Add objUser.ADSPath 
76.
End If 
77.
Next 
78.
 
79.
'Ordner werden für denn Benutzer angelegt, dabei wird der Nachname als Ordnername verwendet 
80.
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
81.
 
82.
errReturn = objNewShare.Create _ 
83.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
84.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
85.
 
86.
	'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt 
87.
Set WshShell = WScript.CreateObject("WScript.Shell")    
88.
 
89.
'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll) 
90.
PermL1 = "Administratoren:F " & Nachname & ":F"   
91.
CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1 
92.
WshShell.Run CMD, 0, 1 
93.
Loop 
94.
 
95.
'Function für die Erstellung der Gruppen 
96.
Function GroupExists(Group, OU) 
97.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
98.
OU.Filter = Array("group") 
99.
'Default: Gruppe noch nicht vorhanden 
100.
GroupExists = False 
101.
'Alle in der OU enthaltenen Gruppen durchgehen 
102.
For Each objGroup in OU 
103.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
104.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
105.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
106.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
107.
        GroupExists = True 
108.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
109.
        Exit For 
110.
    End If 
111.
Next 
112.
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
01.
 
02.
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
03.
If ObjFolderExists Then  
04.
Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!") 
05.
AND 
06.
On Error Resume Next 
07.
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
Mitglied: 90776
07.06.2010 um 11:56 Uhr
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
Bitte warten ..
Mitglied: Edi.Pfisterer
07.06.2010 um 12:17 Uhr
Hallo koluschki!
so in etwa muss es aussehen, damit du die Sache mit bestehendem Ordner in den Griff bekommst...
01.
Set fso = CreateObject("Scripting.FileSystemObject")   'das steht bei dir schon irgendwo, also nicht miteinbaun!!! 
02.
 
03.
IF fso.FolderExists("C:\Freigaben\" & Nachname) then 
04.
         Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!") 
05.
         Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname) 
06.
ELSE 
07.
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
08.
END IF
btw: was switcher94 betrifft bezieht sich auf den implementierten batch-Teil
lg
Bitte warten ..
Mitglied: koluschkiB
07.06.2010 um 13:10 Uhr
Hey Edi,

super es hat geklappt, wenn der Ordner mit dem Namen existiert kommt die MSGbox und das ding läuft dann weiter

hab das script noch einwenig umgebastelt, da ich vorher einen festdefiniertem Ordner C.\freigaben hatte. wenn er nicht vorhanden ist, gabs ne fehlermeldung. Hab dieses Script fragment auch dort eingebaut, da der Ordner jetzt mit erstellt wird, die Msgbox einfach weggelassen und alles dementsprechend angepasst und es ist genau nach meiner vorstellung

könnte ich dieses Fragment (nach bearbeitung) auch problemlos beim User anlegen nutzen? also wenn User XY bereits existiert usw...

gruß und danke für die hilfe

koluschkiB
Bitte warten ..
Mitglied: koluschkiB
07.06.2010 um 13:47 Uhr
dachte evtl an sowas hier

01.
if objOU.UserExists Then 
02.
        Msgbox = ("Der User "&Nachname&" existiert bereits!") 
03.
             Set objUser = GetobjUser("user", "CN=" & Vorname & " " & Nachname) 
04.
else 
05.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
06.
objUser.Put "sAMAccountName", Nachname 
07.
objUser.Put "displayName", Vorname & " " & Nachname 
08.
objUser.Put "givenName", Vorname 
09.
objUser.Put "sn", Nachname 
10.
objUser.Put "description", Abteilung 
11.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
12.
objUser.SetInfo 
13.
objUser.SetPassword Passwort 
14.
objUser.Put "userAccountControl", 544 
15.
objUser.Put "pwdLastSet", 0 
16.
objUser.SetInfo 
17.
end if
leider hat mir das script nen fehler raus. dass das Objekt "USerExists" nicht unterstützt wird

hmm blöd n bisschen
Bitte warten ..
Mitglied: Edi.Pfisterer
07.06.2010 um 14:11 Uhr
Hallo!
Probier mal (ungetestet):
01.
set objUser = GetobjUser("user", "CN=" & Vorname & " " & Nachname)  
02.
If exists objUser Then 
03.
       Msgbox = ("Der User "&Nachname&" existiert bereits!")  
04.
else 
05.
 
06.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
07.
       objUser.Put "sAMAccountName", Nachname 
08.
       objUser.Put "displayName", Vorname & " " & Nachname 
09.
       objUser.Put "givenName", Vorname 
10.
       objUser.Put "sn", Nachname 
11.
       objUser.Put "description", Abteilung 
12.
       objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
13.
       objUser.SetInfo 
14.
       objUser.SetPassword Passwort 
15.
       objUser.Put "userAccountControl", 544 
16.
       objUser.Put "pwdLastSet", 0 
17.
       objUser.SetInfo 
18.
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
Bitte warten ..
Mitglied: koluschkiB
07.06.2010 um 14:20 Uhr
Hey Edi,

klappt leider nicht so ganz wie erwartet:

01.
> set objUser = GetobjUser("user", "CN=" & Vorname & " " & Nachname)  
02.
> If exists objUser Then 
03.
>        Msgbox = ("Der User "&Nachname&" existiert bereits!")  
04.
> 

Laut Fehlermeldung fehlt zwischen "exists" und "objUser" ein "Then"
verstehe nicht so ganz, warum er da nen fehler reinknallt, da das Then ja ein paar stellen weiter aufgeführt ist.
Hab schon einige möglichkeiten versucht, zusammenschrieben oder mit "." versehen leider hat nichts geholfen, kriege immer andere Fehlermeldungen. Variable nicht deklariert usw.


Schau einfach mal Deinen ersten Beitrag an...
Die Differenz Deiner Kenntnisse und Deiner Herangehensweise an das Problem ist atemraubend!

Hey Danke ich versuche natürlich das beste zu geben und euch zeigen, dass ist doch flexibler bin als ne Bahnschiene.
Kurz gesagt, ich lerne dazu

gruß und danke koluschkiB
Bitte warten ..
Mitglied: Edi.Pfisterer
07.06.2010 um 15:33 Uhr
Hallo!
hier gibts einen anderen Ansatz, der erfolgversprechend zu sein scheint...

und hier ist noch ein anderer Ansatz...

imho könntest du aber hier aber mit on Error Resume next einfach drübersteigen...

hmmm...

bin grad im Stress, daher heute meine Hilfe nur fragmentarisch...

lg
Bitte warten ..
Mitglied: koluschkiB
07.06.2010 um 16:02 Uhr
Hey Edi,

bin für jde Hilfe dankbar auch wenn sie nur kurz und knapp ist.
Hab das mit On Error Resume Next genommen, funktioniert wunderbar.

Aber da ist wiederum ein anderes problem, was sie daraus kristallisiert.
Wenn man das script los laufen lässt, überspringt er brav die Errors, soweit so gut. Aber woher weiss man das am ende der User XYz nicht angelegt wurde, weil er schon existiert?!

Da fällt mir ein, ich muss eh Erfolg und Misserfolg in einer .log datei festhalten, somit kann man nach dem Durchlaufen lassen nachlesen, obs geklappt hat oder nicht
Es gibt also für alles ne lösung ^^

Danke und Gruß

koluschkiB
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...