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

1. Zeile einer csv datei überspringen mit VBS

Frage Entwicklung VB for Applications

Mitglied: koluschkiB

koluschkiB (Level 1) - Jetzt verbinden

26.05.2010 um 14:04 Uhr, 8166 Aufrufe, 32 Kommentare

hallo Admin-Freunde

ich bin auf der suche nach dem syntax wie man die 1. zeiler einer .csv datei überspringt.
hab schon alle hilfen die ich habe ich anspruch genommen, doch ohne erfolg.

das einlesen der csv in das vbscript ist kein problem.
nur stehen in der 1. Zeile Vorname, Nachname usw. was eben ignoriert werden muss.

01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set f = fso.OpenTextFile ("c:\user.csv",1,0) 
03.
 
04.
Do while not f.AtEndOfLine 
05.
Zeile = f.readLine 
06.
Feld = split(Zeile,";") 
07.
Vorname = Feld(0) 
08.
Nachname = Feld(1) 
09.
Abteilung = Feld(2) 
10.
Gruppe1 = Feld(3) 
11.
Gruppe2 = Feld(4) 
12.
Gruppe3 = Feld(5) 
13.
Gruppe4 = Feld(6) 
14.
Gruppe5 = Feld(7)
ist es nur ein wert der geändert werden muss damit es klappt?
ein lösungsansatz wäre sehr hilfreich

danke

koluschki
32 Antworten
Mitglied: Edi.Pfisterer
26.05.2010 um 14:08 Uhr
Hallo!
So klein ist die Welt ....
Ich schon wieder

versuch doch mal folgende Idee:
definiere eine variable Zeilenzaehler und setze sie auf 0
dann zaehlst Du beim durchlaufen zur variable zeilenzaehler jeweils 1 dazu
und um die 1. Zeile zu überspringen sagst Du einfach:
if zeilenzaehler > 0 then
blablalba

fertig schaut das dann ungefähr so aus:

01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set f = fso.OpenTextFile ("c:\user.csv",1,0) 
03.
zeilenzaehler = 0 
04.
Do while not f.AtEndOfLine 
05.
Zeile = f.readLine 
06.
if zeilenzaehler > 0 then 
07.
Feld = split(Zeile,";") 
08.
Vorname = Feld(0) 
09.
Nachname = Feld(1) 
10.
Abteilung = Feld(2) 
11.
Gruppe1 = Feld(3) 
12.
Gruppe2 = Feld(4) 
13.
Gruppe3 = Feld(5) 
14.
Gruppe4 = Feld(6) 
15.
Gruppe5 = Feld(7) 
16.
end if 
17.
zeilenzaehler = zeilenzaehler+1 
18.
loop
Bitte warten ..
Mitglied: LotPings
26.05.2010 um 14:08 Uhr
Wie wärs mit Zeile 03:
If Not f.AtEndOfLine Then Header = f.Readline
Gruß
LotPings
Bitte warten ..
Mitglied: koluschkiB
26.05.2010 um 14:26 Uhr
hey bastla,

wenn ich ne variable namens zeilenzaehler definiere
01.
DIm zeilenzaehler
und mein script mitz deinem ansatz kombiniere, kriege ich denn fehler das bei

end if

eine anweisung erwartet, wieso auch immer.

lasse ich die variable Dim... weg und führe das script aus, so liest er nur die letzte zeile der .csv datei ein
komisch komisch
Bitte warten ..
Mitglied: koluschkiB
26.05.2010 um 14:29 Uhr
hey lot,

wenn ich dein script fragment in die 3. Zeile einfüge, bringt es leider nichts.
er erstellt einen user namens "Vorname Nachname" und erstellt dementsprechend gruppen mit dem namen "Gruppe1 usw..."
so wirklich klappen will es irgendwie nicht...

danke

koluschki
Bitte warten ..
Mitglied: koluschkiB
26.05.2010 um 14:38 Uhr
hab grad getestet, wie es ist wenn ich das loop am ende des scripts setze.
so wie es ursprünglich von mir geschrieben war.

kriege dann aber die fehler meldung

das ein verzeichnispfad ungültig ist.

komisch alles, da wenn ich diesen zeilezaehler komplett weg lasse und das script ausführe, alles immer noch wunderbar geht
Bitte warten ..
Mitglied: Edi.Pfisterer
26.05.2010 um 14:50 Uhr
Hallo koluschki!
Nur damit wir hier keine Unklarheiten bekommen oder ich gar schizophren werde:
BASTLA ist bastla und edi.pfisterer ist Edi Pfisterer
(und btw: ist der Mann, der hinter dem alias Bastla steht um einiges firmer im Umgang mit VBS als ich...
insofern wäre es eine Zumutung für ihn, uns hier zu verwechseln )

nun zu Deinem Problem:
Das mit dem Zeilenzaehler war eine Quatschidee...
Sorry!
hier nun eine andere Idee, die hoffentlich mehr Sinn gibt...

01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set f = fso.OpenTextFile ("c:\user.csv",1,0) 
03.
 
04.
Do while not f.AtEndOfLine 
05.
if len(zeile) = 0 then  
06.
Header = true 
07.
else 
08.
Header = false 
09.
end if 
10.
 
11.
Zeile = f.readLine 
12.
if Header = false then 
13.
 
14.
Feld = split(Zeile,";") 
15.
Vorname = Feld(0) 
16.
Nachname = Feld(1) 
17.
Abteilung = Feld(2) 
18.
Gruppe1 = Feld(3) 
19.
Gruppe2 = Feld(4) 
20.
Gruppe3 = Feld(5) 
21.
Gruppe4 = Feld(6) 
22.
Gruppe5 = Feld(7) 
23.
 
24.
end if 
25.
 
26.
' nun kommt der Eintrag ins AD 
27.
 
28.
loop
Bitte warten ..
Mitglied: LotPings
26.05.2010 um 15:22 Uhr
Hallo Edi,

ich glaub ich bin im falschen Film

Nach koluschkis Eingangsbeschreibung funktioniert sowohl dein erster Ansatz als auch mein 4 sekunden später geposteter Versuch.

Entweder testet er falsch, oder er hat irreführende/unvollständige Angaben gemacht.

Dein 2.ter Versuch kann so nicht funktionieren weil Zeile erst initialisiert werden sollte.

Gruß
LotPings

PS: @Edi Einrückungen bei IF, Schleifen, Loops machen den Code deutlich besser lesbar
Bitte warten ..
Mitglied: koluschkiB
26.05.2010 um 15:44 Uhr
hey Edi,

also, ich hab dein scriptfragment da eingebaut aber ich kriege dennoch ne fehlermeldung, die ich nichts o ganz verstehen

hier ist der auszug aus dem script:
01.
... 
02.
Gruppe5 = Feld(7) 
03.
 
04.
end if 
05.
 
06.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
07.
Passwort = LCase(passwort) 
08.
 
09.
Set objOU = GetObject("LDAP://cn=users,dc=testad,dc=int") 
10.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
11.
objUser.Put "sAMAccountName", Nachname 
12.
objUser.Put "displayName", Vorname & " " & Nachname 
13.
...
ich krieg ne fehlermeldung, dass in der zeile 10 ein übermitteleter verzeichnispfad falsch ist (????)
kann es nicht so ganz nachvollziehen wieso das so ist
vielleichtr hast du ne erklärung dafür

gruß
Bitte warten ..
Mitglied: koluschkiB
26.05.2010 um 15:45 Uhr
Nach koluschkis Eingangsbeschreibung funktioniert sowohl dein erster Ansatz als auch mein 4 sekunden später geposteter versuch


weder das fragment von dir noch von Edi haben funktioniert´, kriege bei beiden fehlermeldung.
habs aber auch hin geschrieben

gruß
Bitte warten ..
Mitglied: Edi.Pfisterer
26.05.2010 um 15:49 Uhr
Hallo LotPings!
Da kann ich Dir heute ausnahmsweise mal nicht recht geben...
mein 2. Ansatz funktionert - ich hab ihn auch getestet...

Das ist ja gerade der Gag an diesem Ansatz, dass die Variable zeile beim ersten Durchlauf der Schleife leer ist, in allen nachfolgenden Durchläufen allerdings nicht.

Was die Einrückungen betrifft gebe ich Dir natürlich recht, aber ich hab den code hier kurzerhand direkt ohne Umschweife eingetippt und da funktionieren TABs leider nicht... sorry!

was anderes:
ich durchblicke Deinen Code nicht...
wie ginge es nach
If Not f.AtEndOfLine Then Header = f.Readline
weiter?
oder gezielter gefragt:
Wird AtEndOfLine nicht erst erreicht, wenn die letzte Zeile erreicht ist? Falls dem so ist - hm... - ich blick einfach nicht durch....
Montagsproblem?
Danke für Deine Erläuterungen!
Bitte warten ..
Mitglied: Edi.Pfisterer
26.05.2010 um 16:00 Uhr
Hallo!
Wieder sinds die Anführungszeichen....

hm...

Vielleicht ginge hier Studieren doch über Probieren )

01.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname)
ergibt für die Variablen
Vorname = hans
nachname = huber

folgenden Wert für die Variable
objUser = objOU.Create("user", "CN=hans huber)

erkennst Du das fehlende Hochkomma am Ende? Vor allem in Kombination mit dem Leerzeichen ein Fehlerquell...

was hälst du von folgender Idee:
01.
Username = Vorname & "_" & Nachname 
02.
Set objUser = objOU.Create("user", "CN=" & Username) 
Gutes gelingen noch
ich geh jetzt heim
lg
Edi
Bitte warten ..
Mitglied: LotPings
26.05.2010 um 16:18 Uhr
Zitat von Edi.Pfisterer:
Hallo LotPings!
Da kann ich Dir heute ausnahmsweise mal nicht recht geben...
mein 2. Ansatz funktionert - ich hab ihn auch getestet...
Das ist ja gerade der Gag an diesem Ansatz, dass die Variable zeile beim ersten Durchlauf der Schleife leer ist, in allen
nachfolgenden Durchläufen allerdings nicht.
Bei mir klappte es nicht, wenn Zeile = "" gesetzt wird, ist die Länge auch null, aber die Variable ist initialisiert.

was anderes:
ich durchblicke Deinen Code nicht...
wie ginge es nach
> If Not f.AtEndOfLine Then Header = f.Readline
weiter?
Das ist doch nur dir Abprüfung ob die Datei ganz leer ist.
oder gezielter gefragt:
Wird AtEndOfLine nicht erst erreicht, wenn die letzte Zeile erreicht ist? Falls dem so ist - hm... - ich blick einfach nicht
f hat einen Lesepointer der mit jeder gelesenen Zeile fortbewegt wird, ist der Pointer mit dem Ende identisch,
ergibt die Abrage f.AtEndOfLine TRUE wenn nicht FALSE. Not kehrt das um.
AtEndOfLine kann beliebig oft abgefragt werden, die Do While.Loop macht das ja auch immer wieder

AtEndOfLine sollte hier IMO auch AtEndOfFile heissen.

Gruß
LotPings
Bitte warten ..
Mitglied: Edi.Pfisterer
27.05.2010 um 08:54 Uhr
Hallo LotPings!
Danke für die Erklärung...

lg
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 10:34 Uhr
Moin Edi,

versteh nicht soganz was mir das ganze bringen soll?
wenn ich deine idee machen, habe ich im AD bei allen benutzern diesen unterstricht zwischen vor- und nachnamen. sind nicht so schön aus.
eigentlich ging es mir hier in diesem thread doch darum, wie man in einer .csv datei die erste zeile überspringt?!
wenn ich deine zweite idee, was das überspringen derzeile einsetze und anpasse kriege ich plötzlich nen syntaxfehler in einer function, die ansich nichts damit zu tun hat. ist für mich nicht ganz nachvollziehbar

hier der gesamte code, mit dem zeilesprung der leide rnicht klappt. das mit dem "Username" habe ich weggelassen

01.
Option Explicit 
02.
 
03.
Dim OU, objDomain, objOU, objUser, objGroup 
04.
Dim fso, f, Zeile, Feld, Vorname, Nachname, Abteilung, i, Passwort 
05.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn 
06.
 
07.
OU = "cn=users,dc=testad,dc=int" 
08.
Set objOU = GetObject("LDAP://" & OU) 
09.
 
10.
Dim File_Share 
11.
File_Share = 0 
12.
Dim MAXIMUM_CONNECTIONS 
13.
MAXIMUM_CONNECTIONS = 25 
14.
 
15.
strComputer = "." 
16.
Set objWMIService = GetObject("winmgmts:" _ 
17.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
18.
Set objNewShare = objWMIService.Get("Win32_Share") 
19.
 
20.
Set fso = CreateObject("Scripting.FileSystemObject") 
21.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
22.
 
23.
Do while not f.AtEndOfLine  
24.
if len(zeile) = 0 then   
25.
Header = true  
26.
else  
27.
Header = false  
28.
end if 
29.
Zeile = f.readLine  
30.
if Header = false then  
31.
end if 
32.
 
33.
Zeile = f.readLine 
34.
Feld = split(Zeile,";") 
35.
Vorname = Feld(0) 
36.
Nachname = Feld(1) 
37.
Abteilung = Feld(2) 
38.
'        Gruppen werden in Schleife direkt angesprochen 
39.
'        Gruppe1 = Feld(3) 
40.
'        Gruppe2 = Feld(4) 
41.
'        Gruppe3 = Feld(5) 
42.
'        Gruppe4 = Feld(6) 
43.
'        Gruppe5 = Feld(7) 
44.
 
45.
 
46.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
47.
Passwort = LCase(passwort) 
48.
 
49.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
50.
objUser.Put "sAMAccountName", Nachname 
51.
objUser.Put "displayName", Vorname & " " & Nachname 
52.
objUser.Put "givenName", Vorname 
53.
objUser.Put "sn", Nachname 
54.
objUser.Put "description", Abteilung 
55.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
56.
objUser.SetInfo 
57.
objUser.SetPassword Passwort 
58.
objUser.Put "userAccountControl", 544 
59.
objUser.Put "pwdLastSet", 0 
60.
objUser.SetInfo 
61.
 
62.
For i = 3 To 7 'alle Gruppen bearbeiten 
63.
If Feld(i) <> "" Then 
64.
If GroupExists(Feld(i), objOU) Then 
65.
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
66.
Else 
67.
Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
68.
objGroup.Put "sAMAccountName", Feld(i) 
69.
objGroup.SetInfo 
70.
End If 
71.
objGroup.Add objUser.ADSPath 
72.
End If 
73.
Next 
74.
 
75.
'Ordner werden für denn Benutzer angelegt, dabei wird der Nachname als Ordnername verwendet 
76.
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
77.
errReturn = objNewShare.Create _ 
78.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
79.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
80.
Loop 
81.
 
82.
Function GroupExists(Group, OU) 
83.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
84.
OU.Filter = Array("group") 
85.
'Default: Gruppe noch nicht vorhanden 
86.
GroupExists = False 
87.
'Alle in der OU enthaltenen Gruppen durchgehen 
88.
For Each objGroup in OU 
89.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
90.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
91.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
92.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
93.
        GroupExists = True 
94.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
95.
        Exit For 
96.
    End If 
97.
Next 
98.
End Function 
99.
 
und ich weiss nicht, warum er mir nen syntaxfehler raushaut an einer stelle in der function
vielleicht hast du ne eklärung dafür

Edit:
Die variable Header hab ich bereist hinzugefügt. dafür kommt in der zeile 33 ein fehler "EINGABE HINTER DATEIENDE" (?)

gruß und danke

koluschkiB
Bitte warten ..
Mitglied: Edi.Pfisterer
27.05.2010 um 11:11 Uhr
Hallo!
füg mal in deinem Code in Zeile 22 folgendes ein
01.
zeile = ""
was die Variable Username (gestriger Beitrag 16:00:19 Uhr ) betrifft:
das ist wieder eine andere Baustelle und hat mit der 1. Zeile aus Deiner csv nichts zu tun!

eine Leerstelle beim login ist halt einfach upraktisch bis unbrauchbar... (ist so eine Meinung von mir).
daher also mein Ansatz mit dem Unterstrich... Alternativ geht auch ein "."
hm...

probier - falls Du auf dem leerzeichen bestehst folgendes (ohne Garantie, das es funktioniert)

01.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname"")
oder alternativ
01.
MeinUsername = Vorname & " " & Nachname 
02.
Set objUser = objOU.Create("user", "CN=" & MeinUsername)
btw: ich bin mir nicht sicher, ob ein Leerzeichen im Username überhaupt von Windows akzeptiert wird...

lg
muss in den Unterricht
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 11:12 Uhr
moin Edi,

ich hab denn fehler erkannt.
das script macht nur jede zweite zeile aus der .csv datei. quasi 2 - 4 - 6 - 8
1 soll er überspringen, aber 3 - 5 - 7 - 9 tut er auch überspringen
dann haut er ne fehler meldung raus "EINGABE HINTER DATEIENDE" = Zeile 33 des unten aufgeführten codes

ich hab die .csv datei mir angeschaut, hab gesehen dass ein ";" zu viel waren. aber selbst nach der korrektur, kommt die fehler meldung

gruß

koluschkiB
Bitte warten ..
Mitglied: LotPings
27.05.2010 um 11:38 Uhr
Hallo koluschki,

wenn du deinen Code vernünftig einrücken würdest,
hättst du wahrscheinlich schon längst erkannt das du innerhalb der do While .. Loop zweimal einen readline machst :
Zeilen 29+33
Das Ergebnis ist also zu erwarten.
Und wenn du meine Kommentare gelesen hättest, wärst du vielleicht selber darauf gekommen.
Wenn du sie doch gelesen hast, solltest du überlegen das Programmieren besser Anderen zu überlassen.

Gruß
LotPings
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 12:52 Uhr
Wenn du sie doch gelesen hast, solltest du überlegen das Programmieren besser Anderen zu überlassen.

Meine worte
ich hasse programmieren, hab aber keine anderen wahl gehabt als es mri 3monaten an zu tun. du verstehst? freiwllig befohlen sozusagen

Das Ergebnis ist also zu erwarten.
ich hab die beiden readline gesehen, wenn ich die erste innerhalb der while do raus machen. wird die erste zeile in der .csv nicht übersprungen, genau so ist es auch wenn ich die erste wieder reinsetze udn die zweite readline raus mache. also so oder so, es bringt kein ergebnis. die erste zeile wird einfach mitberücksichtigt.
sind beide drine kommt die fehlermeldung EINGABE HINTER DATEIENDUNG

ich hab deine kommentare gelsen, findet es aber selbst nicht übersichtlich wenn man diese da einrückt. im gegenteil. gut ich bin kein programmiere und es ist sicherlich auch sinnvoll wenn man unzählige functionen usw hat. aber so weit wird es nie kommen (gott sei dank auch)

gruß

koluschki
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 13:09 Uhr
eine Leerstelle beim login ist halt einfach upraktisch bis unbrauchbar... (ist so eine Meinung von mir).
daher also mein Ansatz mit dem Unterstrich... Alternativ geht auch ein "."

wieso login??

der loginname ist

01.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
der name mit dem leerzeichen ist nur der anzeigename im AD zb "Hans Maulwurf" --> login "HanMa"
man kann beides problemlos in denn eigenschaften des users im AD nach schauen
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 13:34 Uhr
füg mal in deinem Code in Zeile 22 folgendes ein
01.
> zeile = "" 
02.
> 

also statt des f.readline einfach "" setzen?

geht nicht, erste zeile wird mit erstellt, somit hab eich nen user namens Vorname Nachname
Bitte warten ..
Mitglied: Edi.Pfisterer
27.05.2010 um 13:38 Uhr
Hallo!
kurze Pause hier bei mir

versuch mal folgendes:
01.
zeile = "" 
02.
Do while not f.AtEndOfStream 
03.
if len(zeile) = 0 then   
04.
       Header = true  
05.
else  
06.
       Header = false  
07.
end if 
08.
 
09.
Zeile = f.readLine 
10.
 
11.
if Header = false then  
12.
' hier kommt nun dein teil...
btw: die Einrückungen bei IF wären ein massiver Vorteil in Deinem Code...
Dann hättest Du gesehen, dass Zeile 30 und 31 nur Platzfüller sind, aber in dieser Form keinen Nutzen bringen
(da es ja keine Anweisung gibt, falls die Bedingung erfüllt ist...)

Falls Du es hinbekommst:
Bessere bitte deinen Code aus, damit jemand, der in Zukunft Dein unfreiwilliges Schicksal erlebt, mit googeln etwas Glück hat...
und nicht vergessen als gelöst makieren und vielleicht noch ein Hinweis, dass der Code so nun funktioniert...

btw: In der Praxis würde ich aus der csv die erste Zeile löschen und gut isses
Bitte warten ..
Mitglied: LotPings
27.05.2010 um 13:47 Uhr
Zitat von koluschkiB:
ich hasse programmieren, hab aber keine anderen wahl gehabt als es mri 3monaten an zu tun. du verstehst?
freiwllig befohlen sozusagen
Du hast also eigentlich nur 2 Möglichkeiten, ablehnen oder akzeptieren und reinknien.
Eine Dritte "rumjammern und Leute nerven", steht nicht zur Debatte.

ich hab die beiden readline gesehen, wenn ich die erste innerhalb der while do raus machen. wird die erste zeile in der .csv nicht
übersprungen, genau so ist es auch wenn ich die erste wieder reinsetze udn die zweite readline raus mache. also so oder so,
es bringt kein ergebnis. die erste zeile wird einfach mitberücksichtigt.
sind beide drine kommt die fehlermeldung EINGABE HINTER DATEIENDUNG
#§$"%&$§%$"§!
IN MEINER ERSTEN ANTWORT STAND ZEILE3, DAS IST AUSSERHALB DER DO WHILE..LOOP UND DA GEHÖRT EINE READLINE HIN, UM NUR DIE ERSTE ZEILE ZU ÜBERSPRINGEN!!!!

ich hab deine kommentare gelsen, findet es aber selbst nicht übersichtlich wenn man diese da einrückt. im gegenteil. gut
ich bin kein programmiere und es ist sicherlich auch sinnvoll wenn man unzählige functionen usw hat. aber so weit wird es nie
kommen (gott sei dank auch)
Du bist aber nicht alleine auf der Welt, und wenn du Hilfe erwartest, solltest du dich auch an einige Gepflogenheiten halten die lange erprobt sind.

Ich habe mich ja bisher für einen einigermassen geduldigen Menschen gehalten;
aber da du scheinbar vor hast, deine Lernresistenz weiter zu pflegen, sag ich nur

Tschüss.
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 13:50 Uhr
meinst es so?

01.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
02.
 
03.
zeile = "" 
04.
Do while not f.AtEndOfLine  
05.
if len(zeile) = 0 then   
06.
Header = true  
07.
else  
08.
Header = false  
09.
end if 
10.
Zeile = f.readline 
11.
if Header = false then  
12.
end if 
13.
 
14.
'Zeile = f.readLine  
15.
Feld = split(Zeile,";") 
16.
Vorname = Feld(0) 
17.
Nachname = Feld(1) 
18.
...
geht nicht. 1. zeile wird mitgenommen

und auch

01.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
02.
 
03.
zeile = "" 
04.
Do while not f.AtEndOfLine  
05.
if len(zeile) = 0 then   
06.
Header = true  
07.
else  
08.
Header = false  
09.
end if 
10.
Zeile = f.readline 
11.
if Header = false then  
12.
end if 
13.
 
14.
Zeile = f.readLine  
15.
Feld = split(Zeile,";") 
16.
Vorname = Feld(0) 
17.
Nachname = Feld(1)
bringt nur denn bekannten fehler mit sich blabla DATEIENDUNG

gruß

koluschkiB
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 15:18 Uhr
ich aktzeptiere es natürlich und versuche auch selbst dahinter zu kommen, wieso und weshalb irgendwas so ist wie es ist. aber auch ich stoße an meine grenzen, was für dich selbstständig ist, ist es für mich ein absolutes "WOW", dass ist alles neuland für mich. jeder hat seine stärken und schwächen. meine schwäche ist eineutig das programmieren.

irgendwie komme ich mir vor als würde ich hier vor meiner freundin sitzen und für jedes gesagte wort rechenschafft ablegen, aber egal...

ich bin euch natürlich für jede hilfe dankbar die ihr mir gibt und will euch keines wegs auf die nerven gehen. aber manchmal checke ich es absolut nicht was ihr mit irgendwas meint und dementsprechend kommt bei mir nur mist bei raus, w s euch wieder nervt.
vielleicht erwartet ihr einfach zu viel von mir?! ich hab komplexe aufgaben, dass bedeutet aber wieder rum nicht das ich es voll drauf habe. im gegenteil, ich muss mir jede bedenkliche info irgendwo her holen. angefangen beim ersten zeichen was ich in die .vbs datei reinschreibe... gut so krass ist es nicht, aber annäherend

gruß und danke für alle hilfen die ihr mir bis jetzt gegeben habt

koluschkiB
Bitte warten ..
Mitglied: Edi.Pfisterer
27.05.2010 um 15:39 Uhr
@LotPings:
Danke für deinen letzten Beitrag, jetzt hab ichs erst gecheckt, was der Zweck von
01.
If Not f.AtEndOfLine Then Header = f.Readline
leichter hätt ich mir getan, wenn du noch ein paar weitere Zeilen angefügt hättest; unglaublich trotzdem, wie blind man sein kann...

@ koluschki
Merkst du was? Da, wo LotPings heute ist (mit seinen Nerven) war ich schon letzte Woche... Dürft also wohl eindeutig an Dir liege - wobei ich meine zu bemerken, dass sich Dein Ton schon sehr gebessert hat! Noch ein paar Wochen und wir haben Dich soweit, dass Du im Code Einrückungen berücksichtigst, im Text Groß- und Kleinschreibung bzw. die deutsche Rechtschreibung berücksichtigst und - das wird wohl das Entscheidende werden - die Antworten wirklich durchliest und nicht nur den Code kopierst und dich ärgerst, wenn er nicht funktionert...

Da Du aber ähnlich ticken dürftest wie ich (cholerisch, ungeduldig aber ausdauernd... ), habe ich aber jede Menge Verständnis für Dein Verhalten...

also, zum Problem zurück:
Was LotPings meinte, ist folgendes (in seiner 1. Antwort):
er liest vor der Do While Schleife die 1. Zeile aus und wirft sie weg....
(zu meiner Schande hab ich das auch erst jetzt durchschaut...)

Der entsprechende Code sieht dann so aus:
01.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
02.
 
03.
Abfall = f.Readline   ' also die 1. Zeile 
04.
 
05.
Do while not f.AtEndOfStream       'statt AtEndOfLine 
06.
 
07.
Zeile = f.readLine  
08.
Feld = split(Zeile,";") 
09.
Vorname = Feld(0) 
10.
Nachname = Feld(1) 
11.
...
gutes gelingen weiterhin
lg
Edi
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 15:56 Uhr
Hey Edi,

Da Du aber ähnlich ticken dürftest wie ich (cholerisch, ungeduldig aber ausdauernd... ), habe ich aber jede Menge
Verständnis für Dein Verhalten...


Es ist ja nicht so, dass ich mir zum Hobby gemacht habe, euch auf den Keks zu gehen
Aber du hast schon recht mit dem (siehe Zitat)
Ich gebe nicht so schnell auf, aber könnte bei jedem Fehlschlag in die Kiste unter den Tisch treten , Geduld ist das was ich nicht besitze...

und ich frue mich euch mitzuteilen, es hat geklappt... JUHUUUUUUU
Der Befehl überspringt die 1. Zeile und macht alles so wie es sein soll.

Für die Nachwelt, hier der komplette Code

01.
Option Explicit 
02.
 
03.
Dim OU, objDomain, objOU, objUser, objGroup 
04.
Dim fso, f, Zeile, Feld, Vorname, Nachname, Abteilung, i, Passwort, Abfall 
05.
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn 
06.
 
07.
OU = "cn=users,dc=testad,dc=int" 
08.
Set objOU = GetObject("LDAP://" & OU) 
09.
 
10.
Dim File_Share 
11.
File_Share = 0 
12.
Dim MAXIMUM_CONNECTIONS 
13.
MAXIMUM_CONNECTIONS = 25 
14.
 
15.
strComputer = "." 
16.
Set objWMIService = GetObject("winmgmts:" _ 
17.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
18.
Set objNewShare = objWMIService.Get("Win32_Share") 
19.
 
20.
Set fso = CreateObject("Scripting.FileSystemObject") 
21.
Set f = fso.OpenTextFile("c:\user.csv",1,0) 
22.
 
23.
Abfall = f.Readline  
24.
Do while not f.AtEndOfStream  
25.
 
26.
Zeile = f.readLine  
27.
Feld = split(Zeile,";") 
28.
Vorname = Feld(0) 
29.
Nachname = Feld(1) 
30.
Abteilung = Feld(2) 
31.
'        Gruppen werden in Schleife direkt angesprochen 
32.
'        Gruppe1 = Feld(3) 
33.
'        Gruppe2 = Feld(4) 
34.
'        Gruppe3 = Feld(5) 
35.
'        Gruppe4 = Feld(6) 
36.
'        Gruppe5 = Feld(7) 
37.
 
38.
 
39.
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%" 
40.
Passwort = LCase(passwort) 
41.
 
42.
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname) 
43.
objUser.Put "sAMAccountName", Nachname 
44.
objUser.Put "displayName", Vorname & " " & Nachname 
45.
objUser.Put "givenName", Vorname 
46.
objUser.Put "sn", Nachname 
47.
objUser.Put "description", Abteilung 
48.
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int" 
49.
objUser.SetInfo 
50.
objUser.SetPassword Passwort 
51.
objUser.Put "userAccountControl", 544 
52.
objUser.Put "pwdLastSet", 0 
53.
objUser.SetInfo 
54.
 
55.
For i = 3 To 7 'alle Gruppen bearbeiten 
56.
If Feld(i) <> "" Then 
57.
If GroupExists(Feld(i), objOU) Then 
58.
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU) 
59.
Else 
60.
Set objGroup = objOU.Create("Group", "cn=" & Feld(i)) 
61.
objGroup.Put "sAMAccountName", Feld(i) 
62.
objGroup.SetInfo 
63.
End If 
64.
objGroup.Add objUser.ADSPath 
65.
End If 
66.
Next 
67.
 
68.
'Ordner werden für denn Benutzer angelegt, dabei wird der Nachname als Ordnername verwendet 
69.
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname) 
70.
errReturn = objNewShare.Create _ 
71.
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _ 
72.
    MAXIMUM_CONNECTIONS, "Benutzerordner") 
73.
Loop 
74.
 
75.
Function GroupExists(Group, OU) 
76.
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen 
77.
OU.Filter = Array("group") 
78.
'Default: Gruppe noch nicht vorhanden 
79.
GroupExists = False 
80.
'Alle in der OU enthaltenen Gruppen durchgehen 
81.
For Each objGroup in OU 
82.
    'klein geschriebenen Gruppennamen der betrachteten Gruppe 
83.
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen 
84.
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then 
85.
        'bei Übereinstimmung gibt es die Gruppe bereits ... 
86.
        GroupExists = True 
87.
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden 
88.
        Exit For 
89.
    End If 
90.
Next 
91.
End Function
danke euch allen die dabei mitgewirkt haben

grüße und wir hören, voneinander
...spätestens morgen, wenn ich wieder irgendwo hänge ^^

koluschkiB
Bitte warten ..
Mitglied: Edi.Pfisterer
27.05.2010 um 16:19 Uhr
Ja, freut mich, dass es jetzt funktioniert...

aber könnte bei jedem Fehlschlag in die Kiste unter den Tisch treten
Kenn ich, hab mir schon mal den Zehen gebrochen... (hab vergessen, den Monitorstromstecker einzustecken; der schwarze Bildschirm hat mich dann zu härteren Maßnahmen greifen lassen... ), allerdings war ich da noch um einiges jünger...

btw:
Gratuliere zu Deinem Ergebnis..
Was mich noch interessieren würde: wie schauts mit den NTFS-Berechtigugen auf den erzeugten Ordnern für die User aus?
Ich will Dir nicht den Mut rauben, aber da gäbe es imho noch Verbesserungspotential

lg
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 16:38 Uhr
Hey Edi,

Was mich noch interessieren würde: wie schauts mit den NTFS-Berechtigugen auf den erzeugten Ordnern für die User aus?
Ich will Dir nicht den Mut rauben, aber da gäbe es imho noch Verbesserungspotential

Ja, also an denn Berechtigungen bin ich grad dran. Stelle es mir auch nicht all zu schwer vor, wobei die Sachen die ich bereits gefunden habe, nichts funktionieren.
In einigen Foren wird von XCacls.vbs gesprochen, was wiederum ein eigenes Script was petr CMD gestartet wird. Also doch recht kompliziert, hab hier auch n Buch liegen namens "Windows Scripting" aber so richtig hilft es mir nicht weiter.

hab folgendes gefunden:

01.
Dim Dir 
02.
 
03.
Const ADS_ACETYPE_ACCESS_ALLOWED = 0 
04.
Const ADS_ACEFLAG_INHERIT_ACE = 3 
05.
 
06.
Set sec = CreateObject("ADsSecurity") 
07.
Set sd = CreateObject("SecurityDescriptor") 
08.
Set dacl = CreateObject("AccessControlList") 
09.
Set ace = CreateObject("AccessControlEntry") 
10.
Set newace = CreateObject("AccessControlEntry") 
11.
Set FSO = CreateObject("Scripting.FileSystemObject") 
12.
 
13.
 
14.
'====================== Hier Datei oder Ordner angeben ========================= 
15.
 
16.
Dir = "C:\test" 
17.
 
18.
'================================================= ============================== 
19.
 
20.
If FSO.FolderExists(Dir) Then 
21.
 
22.
Set sd = CreateObject("SecurityDescriptor") 
23.
Set sd = sec.GetSecurityDescriptor("FILE://" & Dir) 
24.
Set dacl = sd.DiscretionaryAcl 
25.
 
26.
 
27.
 
28.
'====================== Hier die Rechte angeben ================================ 
29.
 
30.
newAce.Trustee = "Administrator" 'Jeder 
31.
newAce.AccessMask = -1 'Vollzugriff 
32.
newAce.AceType = ADS_ACETYPE_ACCESS_ALLOWED 'Auf 'Zulassen' 
33.
newAce.AceFlags = ADS_ACEFLAG_INHERIT_ACE 'Vererben auf Unterordner und Dateien 
34.
 
35.
'================================================= ============================== 
36.
 
37.
dacl.AddAce newAce 
38.
sd.DiscretionaryAcl = dacl 
39.
sec.SetSecurityDescriptor sd 
40.
 
41.
End If 
42.
 
Bei dem Code mekert er aber, dass Active X elemente da nichts machen können (oder so ähnlich) er macht doof bei dem ADsSecurity, muss also schauen ob ich da was machen kann

selbst hier bei Admin.de habe ich Sachen dazu gefunden, aber irgendwie check ich es gar nicht... aber wird schon

Also ich dachte mir eigentlich, dass es so läuft. CreateFolder... und dann kommen eben dahinter der Name und eben die Berechtigung
Lesen/ Schreiben/ Lösche ... nur Gucken/ nicht Anfassen usw.
Aber so einfach scheint es nicht zu sein

gruß

KoluschkiB
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 16:45 Uhr
Das Script teste, ich auf einem Ordner denn ich Extra dafür angelegt habe. Hab das User Gruppen usw anlegen erstmal weg gelassen. Wenn die berechtigungen erstmal stehen, kann ich sie ja in mein SuperScript einbasteln (irgendwie)

gruß

KoluschkiB
Bitte warten ..
Mitglied: koluschkiB
27.05.2010 um 16:47 Uhr
> aber könnte bei jedem Fehlschlag in die Kiste unter den Tisch treten
Kenn ich, hab mir schon mal den Zehen gebrochen... (hab vergessen, den Monitorstromstecker einzustecken; der schwarze Bildschirm
hat mich dann zu härteren Maßnahmen greifen lassen... ), allerdings war ich da noch um einiges jünger...

Ich bin 28 und selbst in diesem Alter schrecke ich nicht zurück zu härteren Maßnahmen zu greifen.
Bitte warten ..
Mitglied: Edi.Pfisterer
27.05.2010 um 17:25 Uhr
Ich bin 28 face-wink und selbst in diesem Alter schrecke ich nicht zurück zu härteren Maßnahmen zu greifen.
gemäß dem Motto:
"Und hilft nicht Gewalt, hilft viel Gewalt"

Vergiss den Ansatz mit deiner xcacls.vbs
Das geht wesentlich einfacher...

das Programm zum Setzen von Berechtigungen findet sich im Windwosordner und nennt sich cacls

dieses Programm kannst Du
a) direkt in über die MS-DOS - Konsole starten
start/ausführen/cmd --> cacls
(wundere Dich nicht über die karge optische Aufmachung des Programms)

oder
b) von Deinem SuperTool starten lassen

über die entsprechenden Paramter des Programms wirst Du informiert, wenn du
start/ausführen/cmd cacls/? eingibst

zu b)
hier ein Ansatz:
01.
Set WshShell = WScript.CreateObject("WScript.Shell")   
02.
    ' die Berechtigungen werden in den Verzeichnissen der User gesetzt  
03.
 
04.
    PermL1 = "Administratoren:F " & Lehrer & ":C " & MUsername & ":R "  
05.
 
06.
    PermL2 = MUsername & ":W "  
07.
 
08.
    PermA = "Administratoren:F " & Lehrer & ":C " & MUsername & ":R "  
09.
 
10.
    CMD = "cmd /c echo j|cacls \\" & ServerName & "\" & LoesungsShare & "\" & ZielOU & "\" & MUsername & " /G " & PermL1 & " && " & _  
11.
                "echo j|cacls \\" & ServerName & "\" & LoesungsShare & "\" & ZielOU & "\" & MUsername & " /E /G " & PermL2 & " && " & _  
12.
                 "echo j|cacls \\" & ServerName & "\" & AngabeShare & "\" & ZielOU & " /E /G " & PermA  
13.
 
14.
    WshShell.Run CMD, 0, 1	
Aber Achtung: so wird dieser code bei Dir nicht funktionieren...
Versuche mal mit cacls/? die Syntax von diesem Programm zu durchschaun...
Dann würde ich per Hand am entsprechenden Ordner unter Zuhilfenahme von cacls die Rechte zu verändern versuchen...
(Geduld ist hier gefragt, falls das Dein erster Einsatz von DOS ist...)

Wenn das gelungen ist: versuch diesen Code zu durchblicken...
Der Schwerpunt liegt natürlich in der Variable CMD
Tipp 1) echo j ---> ihat den Zweck, dass du nicht manuell auf J für JA drücken musst...
Tipp 2) (weil ich dich jetzt schon kenne): Achte auf die Hochkomma

gutes gelingen
lg
Edi
Bitte warten ..
Mitglied: koluschkiB
28.05.2010 um 08:52 Uhr
Moin Edi,

danke fürd ie vielen Tipps. Sieht einwenig kompliziert aus das ganze.
hab selbst das hier gefunden:

http://www.vbarchiv.net/tipps/tipp_1332-profilefolder-erstellen-verwalt ...

werde aber schauen, wie ich es nun zum laufen kriege.
ich muss es ja aus meinem, supertool starten. wenn ich das jetztr ichtig verstanden habe, kann ich also aus einem VBScript einen CMD befehl problemlos starten?!
Habs vorab schon mal getestet, ich nutze nen Win2008 server, und die cmd sagte mir gleich cacls ist alt junge, nimm icacls
werde damit bisschen rumexperimentieren
Denke, dass sollte kein Problem darstellen.
Werde einen neue Thread dann auf machen, wenn es so weit ist. Dieses Beitrag ist ja schon geschlossen, ging ja hauptsächlich um das überspringen der 1. Zeile in der .csv datei.

danke für die tipps

koluschkiB
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...