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

Check ob user im AD existiert mit vbs

Frage Entwicklung VB for Applications

Mitglied: koluschkiB

koluschkiB (Level 1) - Jetzt verbinden

10.06.2010, aktualisiert 18.10.2012, 8690 Aufrufe, 31 Kommentare

Hallo Adminanhänger

früher oder später kommen sie alle wieder

Hab da ein Problem beim Umsetzen einer Idee in meinem Script was User und Gruppen im AD anlegt.

Da es vorkommt, das evtl. beim Anlegen eines User mit VBS ein fehler rausgehauen wird, dass das Objekt (user) bereist existiert. Will ich eine If abfrage basteln, die dies vorher Checkt.
Leider habe ich das Problem, dass ich eine´Eigenschaft oder Methode verwenden will die nicht existiert...

01.
If UserExists (Feld(0),Feld(1),objOU) Then 
02.
errtext.WriteLine("Der Benutzer " &Vorname & " " & Nachname& " existiert bereits und kann nicht angelegt werden") 
03.
On Error Resume Next 
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.
'Log-Datei mit Text füllen 
18.
logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
19.
End If
Der Fehler liegt direkt ind er 1. zeile ---> UserExists
Hab schon verschieden ansätze versucht, mit fso. usw. aber nichts hat geholfen. Hab natürlich auch andere angehensweise getestet und probiert aber leider ebenfalls ohne erfolg
http://www.computerperformance.co.uk/Logon/code/code_80071392.htm
http://blogs.technet.com/b/heyscriptingguy/archive/2005/09/07/how-can-i ...
leider scheitert es an der umsetzung des ganzen...

Dabei wäre es ratsam diesen Fehler abzufangen.
hat einer von euch ne Idee was ich da am besten nutzen könnte um dieses Problem zu lösen?

gruß

koluschkiB
31 Antworten
Mitglied: 60730
10.06.2010 um 11:34 Uhr
Moin,

die Frage ist doch - woher kommt der Datensatzsalat, mit dem du die User anlegen willst.
Und deine Zeile 1 ist nicht der Anfang des ganzen.

Du kennst doch mittlerweile den Scripting Guy...
da steht doch fast alles schwarz auf weiss...
We’re just searching for all the user accounts (objectCategory = ‘user’) that have a samAccountName equal to .....
das bisschen umstricken schaffst du doch

If UserExists
- so macht der Guy das aber in deinem verlinkten link nicht - denn das geht auch nicht...
Einfach "wild" irgendwelche Befehle erfinden...
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 12:10 Uhr
Du kennst doch mittlerweile den
[http://blogs.technet.com/b/heyscriptingguy/archive/2006/05/16/how-can-i-use-a-script-to-create-a-sequential-series-of-user-accounts.aspx

Ich will keinen Zahl die hinten dran gehangen wird... zb Maulwurf666 oder sowas, das war auch nicht das wonach ich gefragt habe.
Ich suche einfach nen Befehl, der Überprüft ob der User existiert

Das
01.
If UserExists
nicht geht ist mir klar, um das festzustellen erfordert es auch keine großen Programmierküsnte
---> Script straten und zack kommt auch die Fehlermeldung

Es muss doch ne Möglichkeit geben es einfach und unkompliziert in wenigen Zeilen zu realisieren?!

Gruß und Danke

koluschkiB
Bitte warten ..
Mitglied: 60730
10.06.2010 um 12:55 Uhr
Zitat von koluschkiB:
Ich will keinen Zahl die hinten dran gehangen wird... zb Maulwurf666 oder sowas, das war auch nicht das wonach ich gefragt habe.
Ich suche einfach nen Befehl, der Überprüft ob der User existiert..

Woran denkst du erkennt man, ob es einen User gibt?

Rischdisch - der samAccountName ist bereits vergeben...

Gruß
Bitte warten ..
Mitglied: Edi.Pfisterer
10.06.2010 um 13:37 Uhr
Hallo kolouschki!

Was TimoBeil damit meint:
Du brauchst ein Skript, das innerhalb Deiner User überprüft, obs jemanden gibt, der so heisst wie der, den Du anlegen möchtest...

der entsprechende Code im von ihm angeführten Link ist:

01.
objCommand.CommandText = _ 
02.
    "SELECT AdsPath FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user' " & _ 
03.
        "AND samAccountName = '" & strSearchName & "'" 
04.
Set objRecordSet = objCommand.Execute 
05.
 
06.
If objRecordset.RecordCount = 0 then 
07.
' User ist noch nicht vorhanden 
08.
end if
strSearchName ist der von dir neuanzulegende User, eh klar

Hoffe, Dir etwas auf die Sprünge geholfen zu haben...
lg
Bitte warten ..
Mitglied: Markus68
10.06.2010 um 13:57 Uhr
Hy

die untenstehende Funktion sollte dir weiterhelfen.

gruss

01.
Function GetCurrentRootDse() 
02.
	Dim objRootDse 
03.
	Set objRootDse = GetObject("LDAP://RootDSE") 
04.
	GetCurrentRootDse = "LDAP://" & objRootDSE.Get("defaultNamingContext") 
05.
	Set objRootDse = Nothing 
06.
End Function 
07.
 
08.
Function QueryAD(strRootDse,strSamAccount,strScope)  
09.
	Dim objConnection,objCommand,objRecordSet 
10.
	Set objConnection = CreateObject("ADODB.Connection") 
11.
	objConnection.Open "Provider=ADsDSOObject;" 
12.
	Set objCommand = CreateObject("ADODB.Command") 
13.
	objCommand.ActiveConnection = objConnection 
14.
	objCommand.CommandText="<"&strRootDse&">;"&"(&(objectClass=user)(samAccountname=" & strSamAccount & "))"&";samAccountName;"&strScope 
15.
	Set objRecordSet = objCommand.Execute 
16.
	If objRecordSet.RecordCount > 0 Then 
17.
		QueryAD=True 
18.
	Else  
19.
		QueryAD=False 
20.
	End If 
21.
	objRecordSet.Close 
22.
	objConnection.Close 
23.
	Set objConnection = Nothing 
24.
	Set objCommand = Nothing 
25.
	Set objRecordSet = Nothing  
26.
End Function 
27.
 
28.
 
29.
If QueryAD(GetCurrentRootDse,"JohnDoe","subtree") = True Then 
30.
								'+-------> JohnDoe mit LoginName ersetzen 
31.
	WScript.Echo "Benutzer existiert bereits" 
32.
Else  
33.
	WScript.Echo "Benutzer existert nicht" 
34.
End If 
35.
 
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 14:00 Uhr
Hey Timo & Edi,

ich hab nicht dran gedacht, dass er den samAccountName checkt. woher auch?!

nun ja:

hab denn code denn Edi mir gab, so um gebastelt, aber es klappt nicht

01.
objCommand.CommandText = _ 
02.
	"SELECT AdsPath FROM 'LDAP://dc=testAD,dc=int' WHERE objectCategory='user' " & _ 
03.
	"AND samAccountName = '" & Nachname & "'" 
04.
Set objRecordSet = objCommand.Execute 
05.
 
06.
If objRecordset.RecordCount = 0 then 
07.
' User ist noch nicht vorhanden 
08.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
09.
objUser.Put "sAMAccountName", Nachname 
10.
objUser.Put "displayName", Vorname & " " & Nachname 
11.
objUser.Put "givenName", Vorname 
12.
objUser.Put "sn", Nachname 
13.
objUser.Put "description", Abteilung 
14.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
15.
objUser.SetInfo 
16.
objUser.SetPassword Passwort 
17.
objUser.Put "userAccountControl", 544 
18.
objUser.Put "pwdLastSet", 0 
19.
objUser.SetInfo 
20.
'Log-Datei mit Text füllen 
21.
logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
22.
End If
Ich hab das objekt in den variablen angelgt "objCommand" und wenn ich das script ausführe kriege die Fehlermeldung

Hier direkt in Zeile 1 ----> Objekt erforderlich: "

ich werde nicht schlau draus, wieso. es sind doch alle Zeichen da. Wieso macht das Ding so Doof?!

Gruß und Danke für eure Hilfe

KoluschkiB
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 14:08 Uhr
Hey Markus

die untenstehende Funktion sollte dir weiterhelfen.

Ja ne Funktion, wenn ich das jetzt richtg verstanden habe. einfach Diese Funktion in meinen Quellcode kopieren/ die Zeilen die bei mir den User anlegen überschrieben? richtig?

Hab ich gemacht und gleich in der 1. Zeile der Function haut er mir nen Syntaxfehler raus.

mach ich irgendwas falsch?

gruß und danke

koluschkiB
Bitte warten ..
Mitglied: Biber
10.06.2010 um 14:18 Uhr
[OT]

Zitat von koluschkiB:
Hab ich gemacht und gleich in der 1. Zeile der Function haut er mir nen Syntaxfehler raus.
mach ich irgendwas falsch?

Ach was...
Liegt bestimmt an der Wärme heute.
[/OT]
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 14:33 Uhr
Zitat von Biber:
[OT]

>
Zitat von koluschkiB:
> ----
> Hab ich gemacht und gleich in der 1. Zeile der Function haut er mir nen Syntaxfehler raus.
> mach ich irgendwas falsch?

Ach was...
Liegt bestimmt an der Wärme heute.
[/OT]


JAJA bestimmt
Bitte warten ..
Mitglied: Markus68
10.06.2010 um 14:54 Uhr
Hoi koluschkiB

Kannst du bitte den ganzen Code raufstellen? Ich denke du liest von irgendeiner Quelle
die daten der Bentuzer ein welche erstellt werden sollen.

Gruss
Markus
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 15:07 Uhr
Hey Markus

hier der gesamte Quellcode:

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, objFile, logfile, errfile, logText, errtext 
06.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1 
07.
Const ForAppending = 8 
08.
 
09.
 
10.
'Organisationseinheit im AD wird gesetzt (benutzer) 
11.
OU = "cn=users,dc=testad,dc=int" 
12.
Set objOU = GetObject("LDAP://" & OU) 
13.
 
14.
'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe 
15.
Dim File_Share 
16.
File_Share = 0 
17.
Dim MAXIMUM_CONNECTIONS 
18.
MAXIMUM_CONNECTIONS = 25 
19.
 
20.
 
21.
'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis) 
22.
strComputer = "." 
23.
Set objWMIService = GetObject("winmgmts:" _ 
24.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
25.
Set objNewShare = objWMIService.Get("Win32_Share") 
26.
 
27.
'Die Datei mit allen Benutzerangaben wird geladen 
28.
Set fso = CreateObject("Scripting.FileSystemObject") 
29.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
30.
 
31.
IF fso.FolderExists("C:\Helpdesk") then 
32.
		Set objFolder = fso.GetFolder("C:\Helpdesk") 
33.
ELSE 
34.
Set objFolder = fso.CreateFolder("C:\Helpdesk") 
35.
Wscript.Echo "Helpdeskordner wurde auf c:\ angelegt, in Ihm befindet sich die gesamte Doku!" 
36.
End if 
37.
 
38.
'1.Zeile der .csv Datei wird Übersprungen 
39.
Abfall = f.Readline   ' also die 1. Zeile   
40.
Do while not f.AtEndOfStream       'statt AtEndOfLine 
41.
 
42.
'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet 
43.
Zeile = f.readLine  
44.
Feld = split(Zeile,";") 
45.
Vorname = Feld(0) 
46.
Nachname = Feld(1) 
47.
Abteilung = Feld(2) 
48.
'        Gruppen werden in Schleife direkt angesprochen 
49.
'Gruppe1 = Feld(3) 
50.
'Gruppe2 = Feld(4) 
51.
'Gruppe3 = Feld(5) 
52.
'Gruppe4 = Feld(6) 
53.
'Gruppe5 = Feld(7) 
54.
 
55.
 
56.
'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung  
57.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
58.
Passwort = LCase(passwort) 
59.
 
60.
Set logfile = fso.CreateTextFile("C:\Helpdesk\" &Nachname&".log") 
61.
logfile.Close 
62.
 
63.
IF fso.FileExists("C:\Helpdesk\error.log") then 
64.
		Set objFile = fso.GetFile("C:\Helpdesk\error.log") 
65.
errtext.Close 
66.
ELSE 
67.
Set errfile = fso.CreateTextFile("C:\Helpdesk\Error.log") 
68.
errfile.Close 
69.
End if 
70.
 
71.
 
72.
Set logtext = fso.OpenTextFile _ 
73.
("C:\Helpdesk\"&Nachname&".log", ForAppending, True) 
74.
Set errtext = fso.OpenTextFile _ 
75.
("C:\Helpdesk\error.log", ForAppending, True) 
76.
 
77.
'Infos für das AD, die dem User in den AD Eigenschaften zugeordnet werden 
78.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
79.
objUser.Put "sAMAccountName", Nachname 
80.
objUser.Put "displayName", Vorname & " " & Nachname 
81.
objUser.Put "givenName", Vorname 
82.
objUser.Put "sn", Nachname 
83.
objUser.Put "description", Abteilung 
84.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
85.
objUser.SetInfo 
86.
objUser.SetPassword Passwort 
87.
objUser.Put "userAccountControl", 544 
88.
objUser.Put "pwdLastSet", 0 
89.
objUser.SetInfo 
90.
'Log-Datei mit Text füllen 
91.
logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
92.
 
93.
'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet 
94.
For i = 3 To 7 'alle Gruppen bearbeiten 
95.
If Feld(i) <> "" Then 
96.
If GroupExists(Feld(i), objOU) Then 
97.
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
98.
Else 
99.
Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
100.
objGroup.Put "sAMAccountName", Feld(i) 
101.
objGroup.SetInfo 
102.
End If 
103.
objGroup.Add objUser.ADSPath 
104.
End If 
105.
Next 
106.
 
107.
logtext.WriteLine("und ist Mitglied folgender Gruppen: 1." &Feld(3) &" 2. " &Feld(4) &" 3. " &Feld(5) &" 4. " &Feld(6) &" 5. " &Feld(7)) 
108.
logtext.WriteLine("Der Loginname des Benutzers lautet: " &Nachname) 
109.
logtext.WriteLine("Der Benutzer hat folgendes Passwort: " &Passwort) 
110.
 
111.
'Oberordner wird auf c:\ angelegt 
112.
IF fso.FolderExists("C:\Freigaben") then 
113.
         Set objFolder = fso.GetFolder("C:\Freigaben") 
114.
ELSE 
115.
Set objFolder = fso.CreateFolder("C:\Freigaben") 
116.
Wscript.Echo "Der Oberordner C:\Freigaben wurde angelegt! In Ihm befinden sich die Benutzerordner!" 
117.
END IF 
118.
 
119.
 
120.
'Benutzer spezifischer Ordner wird angelegt 
121.
IF fso.FolderExists("C:\Freigaben\" & Nachname) then 
122.
         'Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!") 
123.
		 errtext.WriteLine("Der Ordner " &Nachname& " existiert bereits und kann nicht angelegt werden") 
124.
         Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname) 
125.
	 
126.
ELSE 
127.
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
128.
END IF 
129.
 
130.
errReturn = objNewShare.Create _ 
131.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
132.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
133.
 
134.
	'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt 
135.
Set WshShell = WScript.CreateObject("WScript.Shell")    
136.
 
137.
'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll) 
138.
PermL1 = "Administratoren:F " & Nachname & ":F"   
139.
CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1 
140.
WshShell.Run CMD, 0, 1 
141.
Loop 
142.
 
143.
'Function für die Erstellung der Gruppen 
144.
Function GroupExists(Group, OU) 
145.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
146.
OU.Filter = Array("group") 
147.
'Default: Gruppe noch nicht vorhanden 
148.
GroupExists = False 
149.
'Alle in der OU enthaltenen Gruppen durchgehen 
150.
For Each objGroup in OU 
151.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
152.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
153.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
154.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
155.
        GroupExists = True 
156.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
157.
        Exit For 
158.
    End If 
159.
Next 
160.
End Function 
161.
 
162.
logtext.Close 
163.
errtext.Close
Danke für die hilfe

koluschkiB
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 15:16 Uhr
Hab noch ne andere Idee gehabt,
schaut euch die mal an ob das evtl. gehen würde...

01.
If err.Number = 80071392 Then 
02.
errtext.WriteLine("Der Benutzer " &Nachname& " existiert bereits und kann nicht angelegt werden") 
03.
On Error Resume Next 
04.
Else 
05.
'Infos für das AD, die dem User in den AD Eigenschaften zugeordnet werden 
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.
'Log-Datei mit Text füllen 
19.
logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
20.
End if
80071392 ist der Fehlercode der ir angezeigt wird, wenn das Objekt (Benutzer) vorhanden ist.

Danke für alle Tipps

koluschkiB
Bitte warten ..
Mitglied: Markus68
10.06.2010 um 16:04 Uhr
Sorry hat etwas gedauert....Bei mir lief das Script ohne Probleme durch

Cu

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, objFile, logfile, errfile, logText, errtext 
06.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1 
07.
Const ForAppending = 8 
08.
 
09.
 
10.
'Organisationseinheit im AD wird gesetzt (benutzer) 
11.
OU = "cn=users,dc=testad,dc=int" 
12.
Set objOU = GetObject("LDAP://" & OU) 
13.
 
14.
'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe 
15.
Dim File_Share 
16.
File_Share = 0 
17.
Dim MAXIMUM_CONNECTIONS 
18.
MAXIMUM_CONNECTIONS = 25 
19.
 
20.
 
21.
'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis) 
22.
strComputer = "." 
23.
Set objWMIService = GetObject("winmgmts:" _ 
24.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
25.
Set objNewShare = objWMIService.Get("Win32_Share") 
26.
 
27.
'Die Datei mit allen Benutzerangaben wird geladen 
28.
Set fso = CreateObject("Scripting.FileSystemObject") 
29.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
30.
 
31.
IF fso.FolderExists("C:\Helpdesk") then 
32.
		Set objFolder = fso.GetFolder("C:\Helpdesk") 
33.
ELSE 
34.
Set objFolder = fso.CreateFolder("C:\Helpdesk") 
35.
Wscript.Echo "Helpdeskordner wurde auf c:\ angelegt, in Ihm befindet sich die gesamte Doku!" 
36.
End if 
37.
 
38.
'1.Zeile der .csv Datei wird Übersprungen 
39.
Abfall = f.Readline   ' also die 1. Zeile   
40.
Do while not f.AtEndOfStream       'statt AtEndOfLine 
41.
 
42.
'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet 
43.
Zeile = f.readLine  
44.
Feld = split(Zeile,";") 
45.
Vorname = Feld(0) 
46.
Nachname = Feld(1) 
47.
Abteilung = Feld(2) 
48.
'        Gruppen werden in Schleife direkt angesprochen 
49.
'Gruppe1 = Feld(3) 
50.
'Gruppe2 = Feld(4) 
51.
'Gruppe3 = Feld(5) 
52.
'Gruppe4 = Feld(6) 
53.
'Gruppe5 = Feld(7) 
54.
 
55.
 
56.
 
57.
 
58.
 
59.
'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung  
60.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
61.
Passwort = LCase(passwort) 
62.
 
63.
 
64.
 
65.
 
66.
 
67.
 
68.
 
69.
 
70.
If QueryAD(GetCurrentRootDse,Nachname,"subtree") = True Then 
71.
								'+-------> JohnDoe mit LoginName ersetzen 
72.
	WScript.Echo "Benutzer existiert bereits" 
73.
Else  
74.
	Set logfile = fso.CreateTextFile("C:\Helpdesk\" &Nachname&".log") 
75.
	logfile.Close 
76.
 
77.
	IF fso.FileExists("C:\Helpdesk\error.log") then 
78.
		Set objFile = fso.GetFile("C:\Helpdesk\error.log") 
79.
		'errtext.Close 
80.
	Else 
81.
		Set errfile = fso.CreateTextFile("C:\Helpdesk\Error.log") 
82.
		'errfile.Close 
83.
	End If 
84.
 
85.
 
86.
	Set logtext = fso.OpenTextFile _ 
87.
	("C:\Helpdesk\"&Nachname&".log", ForAppending, True) 
88.
	Set errtext = fso.OpenTextFile _ 
89.
	("C:\Helpdesk\error.log", ForAppending, True) 
90.
	Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
91.
	objUser.Put "sAMAccountName", Nachname 
92.
	objUser.Put "displayName", Vorname & " " & Nachname 
93.
	objUser.Put "givenName", Vorname 
94.
	objUser.Put "sn", Nachname 
95.
	objUser.Put "description", Abteilung 
96.
	objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
97.
	objUser.SetInfo 
98.
	objUser.SetPassword Passwort 
99.
	objUser.Put "userAccountControl", 544 
100.
	objUser.Put "pwdLastSet", 0 
101.
	objUser.SetInfo 
102.
	'Log-Datei mit Text füllen 
103.
	logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
104.
 
105.
	'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet 
106.
	For i = 3 To 7 'alle Gruppen bearbeiten 
107.
		If Feld(i) <> "" Then 
108.
			If GroupExists(Feld(i), objOU) Then 
109.
				Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
110.
			Else 
111.
				Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
112.
				objGroup.Put "sAMAccountName", Feld(i) 
113.
				objGroup.SetInfo 
114.
			End If 
115.
		objGroup.Add objUser.ADSPath 
116.
		End If 
117.
	Next 
118.
 
119.
	logtext.WriteLine("und ist Mitglied folgender Gruppen: 1." &Feld(3) &" 2. " &Feld(4) &" 3. " &Feld(5) &" 4. " &Feld(6) &" 5. " &Feld(7)) 
120.
	logtext.WriteLine("Der Loginname des Benutzers lautet: " &Nachname) 
121.
	logtext.WriteLine("Der Benutzer hat folgendes Passwort: " &Passwort) 
122.
 
123.
	'Oberordner wird auf c:\ angelegt 
124.
	If fso.FolderExists("C:\Freigaben") Then 
125.
    	Set objFolder = fso.GetFolder("C:\Freigaben") 
126.
	Else 
127.
		Set objFolder = fso.CreateFolder("C:\Freigaben") 
128.
		Wscript.Echo "Der Oberordner C:\Freigaben wurde angelegt! In Ihm befinden sich die Benutzerordner!" 
129.
	END If 
130.
 
131.
 
132.
	'Benutzer spezifischer Ordner wird angelegt 
133.
	IF fso.FolderExists("C:\Freigaben\" & Nachname) Then 
134.
    	'Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!") 
135.
		 errtext.WriteLine("Der Ordner " &Nachname& " existiert bereits und kann nicht angelegt werden") 
136.
         Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname) 
137.
	 
138.
	Else 
139.
	Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
140.
	END If 
141.
 
142.
	errReturn = objNewShare.Create _ 
143.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
144.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
145.
 
146.
	'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt 
147.
	Set WshShell = WScript.CreateObject("WScript.Shell")    
148.
 
149.
	'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll) 
150.
	PermL1 = "Administratoren:F " & Nachname & ":F"   
151.
	CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1 
152.
	WshShell.Run CMD, 0, 1 
153.
	logtext.Close 
154.
	errtext.Close 
155.
End If 
156.
Loop 
157.
 
158.
'Function für die Erstellung der Gruppen 
159.
Function GroupExists(Group, OU) 
160.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
161.
OU.Filter = Array("group") 
162.
'Default: Gruppe noch nicht vorhanden 
163.
GroupExists = False 
164.
'Alle in der OU enthaltenen Gruppen durchgehen 
165.
For Each objGroup in OU 
166.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
167.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
168.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
169.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
170.
        GroupExists = True 
171.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
172.
        Exit For 
173.
    End If 
174.
Next 
175.
End Function 
176.
 
177.
Function GetCurrentRootDse() 
178.
	Dim objRootDse 
179.
	Set objRootDse = GetObject("LDAP://RootDSE") 
180.
	GetCurrentRootDse = "LDAP://" & objRootDSE.Get("defaultNamingContext") 
181.
	Set objRootDse = Nothing 
182.
End Function 
183.
 
184.
Function QueryAD(strRootDse,strSamAccount,strScope)  
185.
	Dim objConnection,objCommand,objRecordSet 
186.
	Set objConnection = CreateObject("ADODB.Connection") 
187.
	objConnection.Open "Provider=ADsDSOObject;" 
188.
	Set objCommand = CreateObject("ADODB.Command") 
189.
	objCommand.ActiveConnection = objConnection 
190.
	objCommand.CommandText="<"&strRootDse&">;"&"(&(objectClass=user)(samAccountname=" & strSamAccount & "))"&";samAccountName;"&strScope 
191.
	Set objRecordSet = objCommand.Execute 
192.
	If objRecordSet.RecordCount > 0 Then 
193.
		QueryAD=True 
194.
	Else  
195.
		QueryAD=False 
196.
	End If 
197.
	objRecordSet.Close 
198.
	objConnection.Close 
199.
	Set objConnection = Nothing 
200.
	Set objCommand = Nothing 
201.
	Set objRecordSet = Nothing  
202.
End Function
Bitte warten ..
Mitglied: koluschkiB
10.06.2010 um 16:57 Uhr
Hey Markus,

kein problem wegen der zeit bin für jede hilfe dankbar die mir geboten wird.
Mit den Paar zeilen die du mir geschikct hast, war es abe nicht getan, sind doch viel mehr zeilen als in meinem aber egal.

Ja es läuft problemlos durch. zumindest wenn der Helpdeskordner mit den .log files nicht existiert, ansonsten kommt die bekannte Meldung
Objekt Erforderlich: " und das bei dem befehl errtext.Close
Also ich wüsste nict warum dort "" sein sollten

was ich auch gesehen habe ist, dass wenn er es check das der User bereits existiert, schreibt er es nicht in die Error.log rein. das sie unter else erst erstellt wird?!

habs wie folgt jetzt umgebaut. die .lof files sollen so oder so erstellt werden, also habe ich sie aus der Schelife rausgenommen.

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, objFile, logfile, errfile, logText, errtext 
06.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1 
07.
Const ForAppending = 8 
08.
 
09.
 
10.
'Organisationseinheit im AD wird gesetzt (benutzer) 
11.
OU = "cn=users,dc=testad,dc=int" 
12.
Set objOU = GetObject("LDAP://" & OU) 
13.
 
14.
'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe 
15.
Dim File_Share 
16.
File_Share = 0 
17.
Dim MAXIMUM_CONNECTIONS 
18.
MAXIMUM_CONNECTIONS = 25 
19.
 
20.
 
21.
'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis) 
22.
strComputer = "." 
23.
Set objWMIService = GetObject("winmgmts:" _ 
24.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
25.
Set objNewShare = objWMIService.Get("Win32_Share") 
26.
 
27.
'Die Datei mit allen Benutzerangaben wird geladen 
28.
Set fso = CreateObject("Scripting.FileSystemObject") 
29.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
30.
 
31.
IF fso.FolderExists("C:\Helpdesk") then 
32.
		Set objFolder = fso.GetFolder("C:\Helpdesk") 
33.
ELSE 
34.
Set objFolder = fso.CreateFolder("C:\Helpdesk") 
35.
Wscript.Echo "Helpdeskordner wurde auf c:\ angelegt, in Ihm befindet sich die gesamte Doku!" 
36.
End if 
37.
 
38.
'1.Zeile der .csv Datei wird Übersprungen 
39.
Abfall = f.Readline   ' also die 1. Zeile   
40.
Do while not f.AtEndOfStream       'statt AtEndOfLine 
41.
 
42.
'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet 
43.
Zeile = f.readLine  
44.
Feld = split(Zeile,";") 
45.
Vorname = Feld(0) 
46.
Nachname = Feld(1) 
47.
Abteilung = Feld(2) 
48.
'        Gruppen werden in Schleife direkt angesprochen 
49.
'Gruppe1 = Feld(3) 
50.
'Gruppe2 = Feld(4) 
51.
'Gruppe3 = Feld(5) 
52.
'Gruppe4 = Feld(6) 
53.
'Gruppe5 = Feld(7) 
54.
 
55.
 
56.
'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung  
57.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
58.
Passwort = LCase(passwort) 
59.
 
60.
if fso.FileExists("C:\Helpdesk\" &Nachname&".log") Then 
61.
	Set objFile = fso.GetFile("C:\Helpdesk\" &Nachname&".log") 
62.
	'logtext.Close 
63.
	ELSE 
64.
	Set logfile = fso.CreateTextFile("C:\Helpdesk\" &Nachname&".log") 
65.
	'logfile.Close 
66.
End If	 
67.
 
68.
IF fso.FileExists("C:\Helpdesk\error.log") then 
69.
	Set objFile = fso.GetFile("C:\Helpdesk\error.log") 
70.
	'errtext.Close 
71.
	Else 
72.
	Set errfile = fso.CreateTextFile("C:\Helpdesk\Error.log") 
73.
	'errfile.Close 
74.
End If 
75.
 
76.
If QueryAD(GetCurrentRootDse,Nachname,"subtree") = True Then 
77.
	WScript.Echo "Benutzer existiert bereits" 
78.
Else 
79.
	Set logtext = fso.OpenTextFile _ 
80.
	("C:\Helpdesk\"&Nachname&".log", ForAppending, True) 
81.
	Set errtext = fso.OpenTextFile _ 
82.
	("C:\Helpdesk\error.log", ForAppending, True) 
83.
	Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
84.
	objUser.Put "sAMAccountName", Nachname 
85.
	objUser.Put "displayName", Vorname & " " & Nachname 
86.
	objUser.Put "givenName", Vorname 
87.
	objUser.Put "sn", Nachname 
88.
	objUser.Put "description", Abteilung 
89.
	objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
90.
	objUser.SetInfo 
91.
	objUser.SetPassword Passwort 
92.
	objUser.Put "userAccountControl", 544 
93.
	objUser.Put "pwdLastSet", 0 
94.
	objUser.SetInfo 
95.
	'Log-Datei mit Text füllen 
96.
	logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
97.
 
98.
	'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet 
99.
	For i = 3 To 7 'alle Gruppen bearbeiten 
100.
		If Feld(i) <> "" Then 
101.
			If GroupExists(Feld(i), objOU) Then 
102.
				Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
103.
			Else 
104.
				Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
105.
				objGroup.Put "sAMAccountName", Feld(i) 
106.
				objGroup.SetInfo 
107.
			End If 
108.
		objGroup.Add objUser.ADSPath 
109.
		End If 
110.
	Next 
111.
 
112.
	logtext.WriteLine("und ist Mitglied folgender Gruppen: 1." &Feld(3) &" 2. " &Feld(4) &" 3. " &Feld(5) &" 4. " &Feld(6) &" 5. " &Feld(7)) 
113.
	logtext.WriteLine("Der Loginname des Benutzers lautet: " &Nachname) 
114.
	logtext.WriteLine("Der Benutzer hat folgendes Passwort: " &Passwort) 
115.
 
116.
	'Oberordner wird auf c:\ angelegt 
117.
	If fso.FolderExists("C:\Freigaben") Then 
118.
    	Set objFolder = fso.GetFolder("C:\Freigaben") 
119.
	Else 
120.
		Set objFolder = fso.CreateFolder("C:\Freigaben") 
121.
		Wscript.Echo "Der Oberordner C:\Freigaben wurde angelegt! In Ihm befinden sich die Benutzerordner!" 
122.
	END If 
123.
 
124.
 
125.
	'Benutzer spezifischer Ordner wird angelegt 
126.
	IF fso.FolderExists("C:\Freigaben\" & Nachname) Then 
127.
    	'Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!") 
128.
		 errtext.WriteLine("Der Ordner " &Nachname& " existiert bereits und kann nicht angelegt werden") 
129.
         Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname) 
130.
	 
131.
	Else 
132.
	Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
133.
	END If 
134.
 
135.
	errReturn = objNewShare.Create _ 
136.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
137.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
138.
 
139.
	'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt 
140.
	Set WshShell = WScript.CreateObject("WScript.Shell")    
141.
 
142.
	'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll) 
143.
	PermL1 = "Administratoren:F " & Nachname & ":F"   
144.
	CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1 
145.
	WshShell.Run CMD, 0, 1 
146.
	logtext.Close 
147.
	errtext.Close 
148.
End If 
149.
Loop 
150.
 
151.
'Function für die Erstellung der Gruppen 
152.
Function GroupExists(Group, OU) 
153.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
154.
OU.Filter = Array("group") 
155.
'Default: Gruppe noch nicht vorhanden 
156.
GroupExists = False 
157.
'Alle in der OU enthaltenen Gruppen durchgehen 
158.
For Each objGroup in OU 
159.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
160.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
161.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
162.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
163.
        GroupExists = True 
164.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
165.
        Exit For 
166.
    End If 
167.
Next 
168.
End Function 
169.
 
170.
Function GetCurrentRootDse() 
171.
	Dim objRootDse 
172.
	Set objRootDse = GetObject("LDAP://RootDSE") 
173.
	GetCurrentRootDse = "LDAP://" & objRootDSE.Get("defaultNamingContext") 
174.
	Set objRootDse = Nothing 
175.
End Function 
176.
 
177.
Function QueryAD(strRootDse,strSamAccount,strScope)  
178.
	Dim objConnection,objCommand,objRecordSet 
179.
	Set objConnection = CreateObject("ADODB.Connection") 
180.
	objConnection.Open "Provider=ADsDSOObject;" 
181.
	Set objCommand = CreateObject("ADODB.Command") 
182.
	objCommand.ActiveConnection = objConnection 
183.
	objCommand.CommandText="<"&strRootDse&">;"&"(&(objectClass=user)(samAccountname=" & strSamAccount & "))"&";samAccountName;"&strScope 
184.
	Set objRecordSet = objCommand.Execute 
185.
	If objRecordSet.RecordCount > 0 Then 
186.
		QueryAD=True 
187.
	Else  
188.
		QueryAD=False 
189.
	End If 
190.
	objRecordSet.Close 
191.
	objConnection.Close 
192.
	Set objConnection = Nothing 
193.
	Set objCommand = Nothing 
194.
	Set objRecordSet = Nothing  
195.
End Function
leider kommt n fehler
in Zeile 65
Objekt fehlt: "

es nervt schon langsam. am liebsten würde ich einfach On Error Resume Next rein hauen und dann solls auch gewesen sein. Aber in der Aufgabe heisst es. Fehler sollen Dokumentiert werden...

kannst Bitte mal drüber schauen?
vielleicht siehst du den Fehler, wieso er ausgrechnet so einen Fehler mit "" raushaut

gruß und Danke

koluschkiB
Bitte warten ..
Mitglied: bastla
10.06.2010 um 20:24 Uhr
Hallo koluschkiB!

Das ganze Herumgekaspere mit "FileExists" für die Logs ist doch unnötig - wenn Du einfach (am Beispiel des Errorlogs)
Set errtext = fso.OpenTextFile("C:\Helpdesk\error.log", ForAppending, True)
verwendest, wird die gewünschte Datei im Anfüge-Modus ("ForAppending") geöffnet - egal, ob bereits vorhanden, oder (wegen des "True") erst nach (automatischer) Erstellung ...

Falls Du nicht anfügen willst, genügt ein "CreateTextFile", um die Datei neu zu erstellen (unabhängig davon, ob es schon eine gleichnamige Datei gibt).

Grüße
bastla

P.S.: Freut mich, dass Du "Option Explicit" verwendest ...
Bitte warten ..
Mitglied: Biber
10.06.2010 um 22:14 Uhr
Moin koluschkiB,

wie bastla schon sagte...
Zitat von bastla:
Das ganze Herumgekaspere mit "FileExists" für die Logs ist doch unnötig -
Wenn du das mal wegschmelzen würdest, sind auch die Fehler weg.
P.S.: Freut mich, dass Du "Option Explicit" verwendest ...
Da würde ich noch einen Schritt weiter gehen mit der Erklärung.

"Option Explicit" stellt zumindest sicher, dass alle verwendeten Variablen auch deklariert sein müssen.
Können natürlich auch mehr deklariert worden sein, als verwendet werden... aber hey! Kostet ja das Gleiche.
Aber: wenn es so ist, dass alle Variablen, die evtl mal im Programmfluss "leer" bleiben oder "kein Object enthalten" wider Erwarten...
--> dann müsstest du doch jede einzelne gatesverdammte Variable mit einem normalen Strg-F-Such-Handgriff finden können... jeweils vom ersten Auftreten (der Deklaration) angefangen.

Mach das doch mal... insbesondere verfolge mal die beiden Variablen "objFile" und "logfile".
Und was diese beiden in kurzen Existenz zugewiesen bekommen beziehungsweise öffnen und ob sie es jemals wieder schliessen.

... und stelle dir danach die selbstkritischen Fragen:
  • WhyTF sind einige objFile-Variablen "objFile" benamst und andere "logfile"? Und nicht z.B. "oFileErrorLog" und "oFileUserLog"?
  • WhyTF ist ausgerechnet an den Stellen, wo mal die, mal die andere Datei mal neu angelegt, mal zum weiterschreiben geöffnet wird und es durch die Copy&Pasterei ohnehin total tippfehlerträchtig ist keinerlei Kommentare?? Weil es da sofort lesbar und offensichtlich ist OHNE Kommentare??
  • WhatTHF reitet einen Coder, Variablennamen wie "CMD" zu verwenden ? Oder eine Variable MAXIMUM_CONNECTIONS gross zu schreiben (was eigentlich nur Const/Konstanten auszeichnet) ??
  • WhoTF hat die Einrückungen vorgenommen und nach welchen ästhetischen Gesichtspunkten? Stevie Wonder?

Der Tag wird kommen, an dem dein erstes Skript mal "produktiv" läuft.... über die Daten von 2000 Usern...
Rein statistisch sind da immer ein paar Prozent dabei, die wissen, wo du wohnst UND die schneller laufen können als du...

Grüße
Biber
Bitte warten ..
Mitglied: bastla
10.06.2010 um 22:31 Uhr
... nur eine kurze Anmerkung zu
dann müsstest du doch jede einzelne gatesverdammte Variable mit einem normalen Strg-F-Such-Handgriff finden können
Noch besser: Verwende Notepad++ und mach einen Doppelklick auf die Variable ...

Grüße
bastla
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 08:22 Uhr
Der Tag wird kommen, an dem dein erstes Skript mal "produktiv" läuft.... über die Daten von 2000 Usern...
Rein statistisch sind da immer ein paar Prozent dabei, die wissen, wo du wohnst UND die schneller laufen können als du...


Ist nicht mein erstes Script
Rein statistisch und auch allgemein gehen mir die paar Prozent der User, voll am Arsch vorbei und es ist mir egal ob die wissen wo ich wohne und schnelle laufen können
Ach so, mir ist es egal ob die Codes eingerückt sind oder nicht, da bricht mir schon kein Zacken aus der Krone.


Aber nichts für ungut, werde mir mal die ganzen Sachen die ihr hier momentan bemängelt anschauen und versuchen das beste draus zu machen.

Danke und Gruß

koluschkiB
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 08:23 Uhr
Noch besser: Verwende Notepad++ und mach einen Doppelklick auf die Variable ...

Hab ich und nutze ich auch
Bitte warten ..
Mitglied: Edi.Pfisterer
11.06.2010, aktualisiert 18.10.2012
Hallo Biber!
Bin begeistert von Deinen WTF-Fragen, und möchte folgendes beitragen:

WhatTHF reitet einen Coder, Variablennamen wie "CMD" zu verwenden ?

frag am besten bastla, er ist der Coder, der geritten wurde
Der Teil stammt aus einer Anregung von mir, die ich hier gecopypastete, und dieser Baustein stammt wiederum aus einer Verbesserung von bastla...


schönes Tagerl noch
Bitte warten ..
Mitglied: 60730
11.06.2010 um 08:59 Uhr
Moin,

Zitat von koluschkiB:
Der Tag wird kommen, an dem dein erstes Skript mal "produktiv" läuft.... über die Daten von 2000 Usern...
Rein statistisch sind da immer ein paar Prozent dabei, die wissen, wo du wohnst UND die schneller laufen können als du...
Ist nicht mein erstes Script

Yupp ist das vom Guy und anderen anderen....

Rein statistisch und auch allgemein gehen mir die paar Prozent der User, voll am Arsch vorbei und es ist mir egal ob die wissen wo ich wohne und schnelle laufen können

Vielen dank für die Informative Zeile - egal wieviele Smilies dran kleben.

Damit sind deine Probleme für mich nie wieder welche.
Denk mal drüber nach, welch "alte" x mal vorexerzierte Hüte du da aus dem Karton zauberst und wieviel "hin & her der ganze Larifarisalmon bis jetzt schon gebraucht hat.

Gruß
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 09:15 Uhr
Hallo Freunde, hab ein paar Sachen befolgt und es geht auch.
Aber denoch hab ich ein Problem und keiner hier in emienr Nähe kann mir erklären warum das so ist

Wenn ich das script laufen lassen, zeigt es mir brav die MSGBOX an "Benutzer XY existiert"
Ich möchte dies aber auch in der Error.log festhalten, dass funktioniert auch so weit.
Es gibt aber ein Problem dabei, er überschriebt mir den Inhalt der Datei.

Ich hab 10 User die angelegt werden sollen, alle 10 sind natürlich schon im AD vorhanden. Kriege die MSGBOX er schreibt es in die .log datei.
Beim zweiten durchlauf, kommt die MSGbox erneut ABER er überschriebt die err.log.
Ich sehe also immer nur den letzten User der nicht angelegt werden konnte, die anderen 9 Writelines sind weg...
Ich weiss jetzt natürlich nicht, ob er die ganze datei Überschreibt oder einfach nur die Erste zeile der Error.log

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, objFile, logfile, errfile, logText, errtext 
06.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1 
07.
Const ForAppending = 8 
08.
 
09.
 
10.
'Organisationseinheit im AD wird gesetzt (benutzer) 
11.
OU = "cn=users,dc=testad,dc=int" 
12.
Set objOU = GetObject("LDAP://" & OU) 
13.
 
14.
'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe 
15.
Dim File_Share 
16.
File_Share = 0 
17.
Dim MAXIMUM_CONNECTIONS 
18.
MAXIMUM_CONNECTIONS = 25 
19.
 
20.
 
21.
'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis) 
22.
strComputer = "." 
23.
Set objWMIService = GetObject("winmgmts:" _ 
24.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
25.
Set objNewShare = objWMIService.Get("Win32_Share") 
26.
 
27.
'Die Datei mit allen Benutzerangaben wird geladen 
28.
Set fso = CreateObject("Scripting.FileSystemObject") 
29.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
30.
 
31.
IF fso.FolderExists("C:\Helpdesk") then 
32.
		Set objFolder = fso.GetFolder("C:\Helpdesk") 
33.
ELSE 
34.
Set objFolder = fso.CreateFolder("C:\Helpdesk") 
35.
Wscript.Echo "Helpdeskordner wurde auf c:\ angelegt, in Ihm befindet sich die gesamte Doku!" 
36.
End if 
37.
 
38.
'1.Zeile der .csv Datei wird Übersprungen 
39.
Abfall = f.Readline   ' also die 1. Zeile   
40.
Do while not f.AtEndOfStream       'statt AtEndOfLine 
41.
 
42.
'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet 
43.
Zeile = f.readLine  
44.
Feld = split(Zeile,";") 
45.
Vorname = Feld(0) 
46.
Nachname = Feld(1) 
47.
Abteilung = Feld(2) 
48.
'        Gruppen werden in Schleife direkt angesprochen 
49.
'Gruppe1 = Feld(3) 
50.
'Gruppe2 = Feld(4) 
51.
'Gruppe3 = Feld(5) 
52.
'Gruppe4 = Feld(6) 
53.
'Gruppe5 = Feld(7) 
54.
 
55.
 
56.
'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung  
57.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
58.
Passwort = LCase(passwort) 
59.
 
60.
 
61.
Set logfile = fso.CreateTextFile("C:\Helpdesk\" &Nachname&".log") 
62.
logfile.Close 
63.
 
64.
Set errfile = fso.CreateTextFile("C:\Helpdesk\Error.log") 
65.
errfile.Close 
66.
 
67.
 
68.
If QueryAD(GetCurrentRootDse,Nachname,"subtree") = True Then 
69.
	Set errtext = fso.OpenTextFile _ 
70.
	("C:\Helpdesk\error.log", ForAppending, True) 
71.
	errtext.WriteLine("Der Benutzer " &Nachname & " existiert bereits und kann nicht angelegt werden") 
72.
	errtext.Close 
73.
	WScript.Echo "Benutzer " &Vorname & " " & Nachname & " existiert bereits" 
74.
 
75.
Else 
76.
	Set logtext = fso.OpenTextFile _ 
77.
	("C:\Helpdesk\"&Nachname&".log", ForAppending, True) 
78.
	Set errtext = fso.OpenTextFile _ 
79.
	("C:\Helpdesk\error.log", ForAppending, True) 
80.
	Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
81.
	objUser.Put "sAMAccountName", Nachname 
82.
	objUser.Put "displayName", Vorname & " " & Nachname 
83.
	objUser.Put "givenName", Vorname 
84.
	objUser.Put "sn", Nachname 
85.
	objUser.Put "description", Abteilung 
86.
	objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
87.
	objUser.SetInfo 
88.
	objUser.SetPassword Passwort 
89.
	objUser.Put "userAccountControl", 544 
90.
	objUser.Put "pwdLastSet", 0 
91.
	objUser.SetInfo 
92.
	'Log-Datei mit Text füllen 
93.
	logtext.WriteLine("Der Benutzer " &Vorname &" " &Nachname& " wurde im AD angelegt") 
94.
 
95.
	'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet 
96.
	For i = 3 To 7 'alle Gruppen bearbeiten 
97.
		If Feld(i) <> "" Then 
98.
			If GroupExists(Feld(i), objOU) Then 
99.
				Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
100.
			Else 
101.
				Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
102.
				objGroup.Put "sAMAccountName", Feld(i) 
103.
				objGroup.SetInfo 
104.
			End If 
105.
		objGroup.Add objUser.ADSPath 
106.
		End If 
107.
	Next 
108.
 
109.
	logtext.WriteLine("und ist Mitglied folgender Gruppen: 1." &Feld(3) &" 2. " &Feld(4) &" 3. " &Feld(5) &" 4. " &Feld(6) &" 5. " &Feld(7)) 
110.
	logtext.WriteLine("Der Loginname des Benutzers lautet: " &Nachname) 
111.
	logtext.WriteLine("Der Benutzer hat folgendes Passwort: " &Passwort) 
112.
 
113.
	'Oberordner wird auf c:\ angelegt 
114.
	If fso.FolderExists("C:\Freigaben") Then 
115.
    	Set objFolder = fso.GetFolder("C:\Freigaben") 
116.
	Else 
117.
		Set objFolder = fso.CreateFolder("C:\Freigaben") 
118.
		Wscript.Echo "Der Oberordner C:\Freigaben wurde angelegt! In Ihm befinden sich die Benutzerordner!" 
119.
	END If 
120.
 
121.
 
122.
	'Benutzer spezifischer Ordner wird angelegt 
123.
	IF fso.FolderExists("C:\Freigaben\" & Nachname) Then 
124.
    	'Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!") 
125.
		 errtext.WriteLine("Der Ordner " &Nachname& " existiert bereits und kann nicht angelegt werden") 
126.
         Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname) 
127.
	 
128.
	Else 
129.
	Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
130.
	END If 
131.
 
132.
	errReturn = objNewShare.Create _ 
133.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
134.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
135.
 
136.
	'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt 
137.
	Set WshShell = WScript.CreateObject("WScript.Shell")    
138.
 
139.
	'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll) 
140.
	PermL1 = "Administratoren:F " & Nachname & ":F"   
141.
	CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1 
142.
	WshShell.Run CMD, 0, 1 
143.
	logtext.Close 
144.
	errtext.Close 
145.
End If 
146.
Loop 
147.
 
148.
'Function für die Erstellung der Gruppen 
149.
Function GroupExists(Group, OU) 
150.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
151.
OU.Filter = Array("group") 
152.
'Default: Gruppe noch nicht vorhanden 
153.
GroupExists = False 
154.
'Alle in der OU enthaltenen Gruppen durchgehen 
155.
For Each objGroup in OU 
156.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
157.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
158.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
159.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
160.
        GroupExists = True 
161.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
162.
        Exit For 
163.
    End If 
164.
Next 
165.
End Function 
166.
 
167.
Function GetCurrentRootDse() 
168.
	Dim objRootDse 
169.
	Set objRootDse = GetObject("LDAP://RootDSE") 
170.
	GetCurrentRootDse = "LDAP://" & objRootDSE.Get("defaultNamingContext") 
171.
	Set objRootDse = Nothing 
172.
End Function 
173.
 
174.
Function QueryAD(strRootDse,strSamAccount,strScope)  
175.
	Dim objConnection,objCommand,objRecordSet 
176.
	Set objConnection = CreateObject("ADODB.Connection") 
177.
	objConnection.Open "Provider=ADsDSOObject;" 
178.
	Set objCommand = CreateObject("ADODB.Command") 
179.
	objCommand.ActiveConnection = objConnection 
180.
	objCommand.CommandText="<"&strRootDse&">;"&"(&(objectClass=user)(samAccountname=" & strSamAccount & "))"&";samAccountName;"&strScope 
181.
	Set objRecordSet = objCommand.Execute 
182.
	If objRecordSet.RecordCount > 0 Then 
183.
		QueryAD=True 
184.
	Else  
185.
		QueryAD=False 
186.
	End If 
187.
	objRecordSet.Close 
188.
	objConnection.Close 
189.
	Set objConnection = Nothing 
190.
	Set objCommand = Nothing 
191.
	Set objRecordSet = Nothing  
192.
End Function
kann mir einer evtl. sagen woran es liegt? bzw. woruaf ich achten muss?

gruß und danke

koluschkiB
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 09:23 Uhr
Damit sind deine Probleme für mich nie wieder welche.

??? Die Standard Antwort zu meinen Fragen war doch eh " Hast du schon die Scipt56.* geschaut? dort findest du alles"
Wenn es doch so einfach ist und alles in dieser heiligen Datei drin steht, da kann man sich doch das Forum hier schenken und einfach direkt auf der Start Seite eine riesen DOWNLOAD BUTTON setzen um diese Datei runter zu laden, spart Ressourcen, eure Nerven und weiss der Teufel was noch...
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 09:53 Uhr
Problem gelöst!!!

01.
Set errfile = fso.CreateTextFile("C:\Helpdesk\Error.log") 
02.
errfile.Close
stand an der falschen stellen!

Danke an alle Hilfen und Mitwirkende

koluschkiB
Bitte warten ..
Mitglied: Edi.Pfisterer
11.06.2010 um 10:10 Uhr
Hallo koluschkiB!
Du weisst, ich bin einer der Dir gut gesinnten, aber, in aller Ehrlichkeit:

Rein statistisch und auch allgemein gehen mir die paar Prozent der User, voll am Arsch vorbei
hättest Du dir sparen können und eine entsprechende Entschuldigung hätte so manches Gemüt besänftigt...
Cholerik ist das Eine, Pöbelei etwas Anderes...

und: Wenn einem Admin die User am Axxxxx vorbei gehen, dann sollter er sich ohnehin besser einen Job als Versicherungsmathematiker im BackBackBackoffice suchen...
Ist zumindest meine bescheidene Meinung. Das Wort Dienstleistung hat eine tiefere Bedeutung...

lg
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 10:36 Uhr
Hey Edi,

hast ja nicht unrecht damit. Aber es nervt immer zu lesen, schau doch in die Hilfedatei rein, dort findest die lösung... Ich schaue doch da rein finde aber nichts brauchbares oder es ist einfach so blöd umschrieben, dass es für mich eben absolut nicht nachvollziehbar ist, es ist toll zu lesen, wie man Ordner usw anlegt. dort steht aber nicht geschrieben wo man in einem bestimmten Script einen befehl setzen muss damit es auch Funktioniert. Das Checken einige eben nicht.
Die denken, ahh er schreibt Scripte, er muss es können... So ist es aber nicht, ich kann mich Null damit anfreunden und wenn ich mich für den Beruf Anwendungsentwickler entschieden hätte. hätte ich schon längst gekündigt und wäre Versicherungsmathematiker geworden. Da gibt es keinen Fehlermeldungen die keinen Sinn für einen ergeben. wie zb "Objekt Erforderlich: " " verdammt in einem befehl errtext.Close, wo soll ich bitte dort ein " reinsetzen?!
Wenn man sich den ganzen Tag mit dieser Materie beschäftigt, weiss man eben worauf es ankommt. Bei mir ist es eben nicht der fall und es wird einem dann vorgehalten... Wir geben keine lösungen nur Hilfe, ja nur das ich die Hilfe nicht umsetzen kann, dass Interessiert niemanden

aber denoch danke ich euch für alle eure Hilfen, die mir zur lösung meiner Aufgabe begetragen haben

koluschkiB
Bitte warten ..
Mitglied: bastla
11.06.2010 um 10:57 Uhr
Hallo koluschkiB!
Die denken, ahh er schreibt Scripte, er muss es können...
Die meisten in Deinen Threads Helfenden wissen, dass Du Dich in Ausbildung befindest und sehen es gerades deshalb nicht als sinnvoll an, Dir (sofort) eine fertige Lösung zu servieren.
dort steht aber nicht geschrieben wo man in einem bestimmten Script einen befehl setzen muss damit es auch Funktioniert.
Es uns zum Vorwurf zu machen, dass Du (durch Deinen Ausbilder) überfordert bist, kann ich aber nicht akzeptieren: Den Kurs "Grundlagen der Programmierung" wirst Du nicht im Fernstudium bei "administrator.de" absolvieren können.
Wir geben keine lösungen nur Hilfe, ja nur das ich die Hilfe nicht umsetzen kann, dass Interessiert niemanden
Dass Dir im Gegensatz zu Deiner Behauptung eine Umsetzung doch gelingen kann, hat sich ja gezeigt ...

Grüße
bastla

P.S.: Ganz unabhängig vom Thema, und sogar wenn Du tatsächlich im "backesten" Office landen solltest: Die Formulierungen in manchen Deiner Wortmeldungen würde ich nicht einmal im Selbstgespräch, geschweige denn in geschriebener und (hier) veröffentlichter Form verwenden ...
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 12:02 Uhr
Hey Bastla,

Es uns zum Vorwurf zu machen, dass Du (durch Deinen Ausbilder) überfordert bist, kann ich aber nicht akzeptieren: Den Kurs
"Grundlagen der Programmierung" wirst Du nicht im Fernstudium bei "administrator.de" absolvieren können.

Ich mache euch keinen Vorwurf und ich will auch keine Super lösungen, hilfestellungen sind Hilfreicher und bringe einen Effekt mit sich, aber durch eure Hilfestellungen war ich oft immer noch am selben Punkt wie am anfang.
Die Grundlage ist auch in dieser 3 Monaten ausbildung nicht absolviert. Ich weiss einen bruchteil und wenn ich eines Tages vor solch einer Programmier aufgabe

Dass Dir im Gegensatz zu Deiner Behauptung eine Umsetzung doch gelingen kann, hat sich ja gezeigt ...

Die Umsetzung gelingt mri einfach durch rum probieren und nich dadurch das ich weiss ich tu. 999 versuche schlagen fehl, ich äörger mich und plötzlichohne wissen, habe ich es dann doch geschafft da s Fragment an die richtige stelle zu setzen und siehe da, es funktioniert...

P.S.: Ganz unabhängig vom Thema, und sogar wenn Du tatsächlich im "backesten" Office landen solltest: Die
Formulierungen in manchen Deiner Wortmeldungen würde ich nicht einmal im Selbstgespräch, geschweige denn in
geschriebener und (hier) veröffentlichter Form verwenden ...

ja manchmal gehe denn Pferde mit mir durch, ich war schon immer so Impulsiv...

gruß

koluschkiB
Bitte warten ..
Mitglied: 60730
11.06.2010 um 12:50 Uhr
Zitat von koluschkiB:
ja manchmal gehe denn Pferde mit mir durch, ich war schon immer so Impulsiv...

gruß

koluschkiB

Ich schreib mal - Das erkennen des Problems ist der erste Weg zur Besserung - und auch - das ist aber nur weil freitags ist grade nochmal so etwas, das deine div. Zeilen "entfernt" entschuldigt.

Und jetzt liesst du dir bitte das fett markierte nochmal durch und sagst diese Zeile auf während du meine allererste Antwort zu deiner Frage nochmal durchließt.

die Frage ist doch - woher kommt der Datensatzsalat, mit dem du die User anlegen willst.

Darauf gabs ja keine Antwort und daher hab ich da auch nicht noch weiter nachgebohrt.
Und jetzt bitte - diese beiden Zeilen zusammen lesen.

Und mit etwas Kaffe im Kopf wirst du erkennen - es macht manchmal mehr Sinn sich vorher Gedanken zu machen, als nachher.

Wie bekomme ich denn ganz schnell - ohne vbs heraus ob ein User existiert?

net user /domain

Soweit "helfe ich dir mal - und die weiteren Schritte machst du allein.

  • Wie kann ich eine Ausgabe vom Prompt in eine Datei ausgeben?
  • Wenn diese Datei mehrere Spalten oder eine andere "Trennung" der einzelnen Datensätze hat - wie kann ich einzelne Werte aus der Datei auslesen?
  • Wenn ich zwei Listen hätte - eine mit der den anzulegenden Benutzern und eine mit den vorhandenen - wie könnte ich die Liste der anzulegenden bereits vorm anlegen bereinigen?

Und dann merkst du - es ist alles so einfach, wenn der erste Weg das aussortieren der unnötigen Schritte ist.

Gruß
Bitte warten ..
Mitglied: koluschkiB
11.06.2010 um 13:07 Uhr
Hey Bastla,

Ich schreib mal - Das erkennen des Problems ist der erste Weg zur Besserung - und auch - das ist aber nur
weil freitags ist
grade nochmal so etwas, das deine div. Zeilen "entfernt" entschuldigt.

Das problem kenne ich, die Lösung ist eher schweriger. Ist so als würde man versuchen nem Pferd skatspielen beizubringen


> die Frage ist doch - woher kommt der Datensatzsalat, mit dem du die User anlegen willst.

Muss diese Frage überlesen haben, die user sind natürlich in einer user.csv datei abgelegt


Wie bekomme ich denn ganz schnell - ohne vbs heraus ob ein User existiert?

> net user /domain

Ja denn Befehl kenne ich, noch vom letzten Jahr Programmieren. Ich versuche aber das ganze mit vbs zu lösen, auch wenn es manchmal nicht klappt

* Wie kann ich eine Ausgabe vom Prompt in eine Datei ausgeben?

Ich würde die Daten in eine .csv Datei exportieren

* Wenn diese Datei mehrere Spalten oder eine andere "Trennung" der einzelnen Datensätze hat - wie kann ich einzelne
Werte aus der Datei auslesen?
  • Wenn ich zwei Listen hätte - eine mit der den anzulegenden Benutzern und eine mit den vorhandenen - wie könnte ich die
Liste der anzulegenden bereits vorm anlegen bereinigen?

Beide Files miteinander vergleichen lassen und (ich weiss nicht obs möglich ist) Wenn einträge zwischen File 1 und 2 identisch sind, löschen lassen. das wäre jetzt ne idee von mir

Und dann merkst du - es ist alles so einfach, wenn der erste Weg das aussortieren der unnötigen Schritte ist.

Ja es ist einfach, wenn man es kann und da auch denn druchblick hat.
Man muss auch die Möglichkeiten kennen die einem VBS PowerShell oder die CMD bietet, sonst sucht man sich dumm und dämlich, so wie ich es meistens tu.

gruß
Bitte warten ..
Mitglied: Biber
11.06.2010, aktualisiert 18.10.2012
Moin,

ich habe meine Sicht zu diesen Beiträgen der letzten Tage hier in einem der ParallelThreads zusammengefasst.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst User und AD Gruppe finden - wie das Pferd aufzäumen (5)

Frage von H41mSh1C0R zum Thema Batch & Shell ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

Batch & Shell
gelöst AD-Felder für User mittels Powershell befüllen aus CSV-Datei (2)

Frage von Alex94G zum Thema Batch & Shell ...

Windows Server
gelöst Wie AD User sauber löschen? (34)

Frage von McLion zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...