Top-Themen

Aktuelle Themen (A bis Z)

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, 4039 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 ..
Ähnliche Inhalte
Windows Server
Account-Sperrungen eines AD-Users auslesen
gelöst Frage von MissJonesWindows Server2 Kommentare

Hallo Zusammen, ist es möglich über Powershell alle Account-Sperrungen von einem AD User auslesen zu lassen? Ich soll quasi ...

Batch & Shell
Mit PowerShell die Berechtigungen eines AD-Users auslesen
gelöst Frage von windelterroristBatch & Shell8 Kommentare

Huhu Admins Brauch eine hoffentlich kleine Unterstützung von euch im PowerShell Bereich. Versuche mit diesem Befehl die AD-User Information ...

Visual Studio
Tastatureingaben abfangen
gelöst Frage von joehuabaVisual Studio7 Kommentare

Hallo Zusammen, ich hab folgendes Problem: Ich fange mit einem Programm bestimmte Tastenkombinationen ab. Das funktioniert auch soweit. Allerdings ...

Batch & Shell
Script mit höherer Berechtigung bei Benutzeranmeldung eines Users am AD ausführen
gelöst Frage von goodbytesBatch & Shell7 Kommentare

Hallo, ich möchte per Loginscript für alle User einen Vorgang bei der Anmeldung anstoßen, der höhere Berechtigungen als der ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 8 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 15 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 17 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 20 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...