yannosch
Goto Top

VBS: Benutzer aus einer CSV Datei anlegen

Guten Tag liebe Community! face-smile

Habe eine Frage bezüglich VBS.
Wie wäre es denn möglich Namen aus einer CSV Datei in einem VB-Script in eine Variable zu speichern?
Die Liste innerhalbe sieht z.B so aus:

VORNAME, NACHNAME
Peter, Lustig
Ann, Katrin
Armin, Peter

Nun möchte ich Vor- und Nachnamen in eine Variable oder Array speichern.
Sodass ich die Benutzer lokal auf meinem Rechner anlegen kann.

Fragt bitte nicht warum ich das aus einer CSV datei machen will oder wieso ich da ein VB-Script für mache ... Ist für ein Programmierprojekt an der Uni.
Bin EIGENTLICH auch relativ "begabt" im Scripten, aber hier steig ich nicht ganz durch - mir fehlen einfach die Ansätze...

Habe an eine ADO Verbindung gedacht ... aber dann dürfen die Felder wieder nicht so lang sein, usw.

Ihr würdet mir echt meinen Tag retten. Und sollte jemand die Muse haben sicher der Sache mal anzunehmen würde ich anbieten en Bierchen zu zischen, auf mich natürlich face-smile
(Denkarbeit soll meiner Meinung nach belohnt werden)

Liebe Grüße von
Yannosch !

Content-Key: 217857

Url: https://administrator.de/contentid/217857

Printed on: April 24, 2024 at 08:04 o'clock

Member: bastla
bastla Sep 25, 2013 updated at 17:48:21 (UTC)
Goto Top
Hallo Yannosch!

Wenn sich Deine Begabung auch auf das Verwenden der Suchfunktion erstreckte ...

... anyhow:
CSV = "D:\Deine.csv"  
Set fso = CreateObject("Scripting.FileSystemObject")  

Zeilen = Split(fso.OpenTextFile(CSV).ReadAll, vbNewLine)
For i = 1 To UBound(Zeilen) 'erste Zeile auslassen, daher Schleife ab Index 1  
    Felder = Split(Zeilen(i), ",")  
    WScript.Echo "Vorname: ", Trim(Felder(0))  
    WScript.Echo "Nachname:", Trim(Felder(1))  
Next
Wenn Du nicht für jede Ausgabe eine MsgBox erzeugen (und dann wegklicken) willst, starte das Script über "cscript" ...

Grüße
bastla
Member: Yannosch
Yannosch Sep 25, 2013 at 19:02:23 (UTC)
Goto Top
Hey hey face-smile Danke schonmal für die rasche Antwort .... Es scheint auch etwas zu funktioninieren ...

In der csv habe ich es so gemacht:

Erste Zeile , Spalte 1:
Vorname
Erste Zeile, Spalte 2:
Nachname
Zweite Zeile, Spalte 1:
Tim
Zweite Zeile, Spalte 2:
Berg
Dritte Zeile, Spalte 1:
Steve
Dritte Zeile, Spalte 2:
Aoki

Nun wird nach ausführen des Scripts in einer MsgBox "Vorname: Tim; Berg" angezeigt.
Wenn ich auf Ok klicke kommt aber ein Laufzeitfehler mit folgendem Inhalt;
"Skript: <Pfad zum Script>
Zeile 25
Zeichen 5
Fehler: Index außerhalb des gültigen Bereichs: '[number:1]'
Code: 800A0009
Quelle: Laufzeitfehler in Microsoft VBScript"

Werde aus der Fehlermeldung nicht wirklich schlau ...
Evtl. Tipps für eine Mögliche Lösung?

@bastla: Das bier rückt näher ! face-smile ;)
Member: Yannosch
Yannosch Sep 25, 2013 at 19:08:33 (UTC)
Goto Top
Ich habe in der CSV Datei nun das ";" durch ein "," ersetzt ... und nun werden die name Richtig aus der MessageBox ausgelesen ...
Aber nach Beendigung des Scripts wird die selbe Fehlermeldung generiert ...

Ich weiß nicht mehr weiter ...
Member: bastla
bastla Sep 25, 2013 at 19:21:27 (UTC)
Goto Top
Hallo Yannosch!

Vermutlich befindet sich am Ende der CSV-Datei eine Leerzeile (die sich dann natürlich nicht in 2 Felder zerlegen lässt) - das lässt sich etwa so prüfen:
CSV = "D:\Deine.csv"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Delim = "," ' Trennzeichen  

Zeilen = Split(fso.OpenTextFile(CSV).ReadAll, vbNewLine)
For i = 1 To UBound(Zeilen) 'erste Zeile auslassen, daher Schleife ab Index 1  
    If InStr(Zeilen(i), Delim) <> 0 Then 'Trennzeichen in der Zeile enthalten  
        Felder = Split(Zeilen(i), Delim)
        WScript.Echo "Vorname: ", Trim(Felder(0))  
        WScript.Echo "Nachname:", Trim(Felder(1))  
    End If
Next
Grüße
bastla
Member: Biber
Biber Sep 25, 2013 updated at 19:31:29 (UTC)
Goto Top
Moin Yannosch,

der von dir beschriebene Fehler wird auftreten, wenn in der CSV-Datei noch eine leere Zeile am Ende (also nur CRLF) dranhängt.
Das fängt bastlas Schnipsel nicht ab - du könntest als neue Zeile 06 eine IF-Prüfung einbauen auf "Länge Zeilen(i) größer 5" oder besser "Ist ein Komma ein Zeile(i) enthalten?" und die darauffolgenden drei Befehle nur in diesem Fall ausführen.

Grüße
Biber
[Edit} ... natürlich wieder mal zu langsam... face-wink [/Edit]
Member: Yannosch
Yannosch Sep 26, 2013 at 07:13:48 (UTC)
Goto Top
Perfekt ...
Nun möchte ich nurnoch die Benutzer lokal anlegen ...

par exemple:

Dim Passwd
Dim Benutzername

Set wshShell = WScript.CreateObject( "WScript.Shell" )
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

Set Computer = GetObject("WinNT://" & strComputerName )

Set Benutzer = Computer.Create("user",Benutzername)
Benutzer.SetPassword Passwd
Benutzer.SetInfo

_____________________________________________

Angenommen der User der Angelegt werden soll, hat den Nachnamen als Benutzernamen und den Vornamen als Passwort.
Wie bekomme ich die Ausgaben von dem Script von @bastla in die Variablen Benutzername und Passwd ? ... Ich komme einfach nicht dahinter und es ist nurnoch wenig Zeit bis zur Abgabe ...

____________________________________________

Aber bis hierhin schonmal ein FETTES Dankeschön an euch beiden ... Das ihr mir wenigsten schonmal bis hier hin geholgen habt....

!!

Liebe Grüße von
Yannosch ! face-smile
Member: Yannosch
Yannosch Sep 26, 2013 at 07:26:47 (UTC)
Goto Top
Okay bin dahinter gekommen ... Einfach anstelle der Variablen Passwd und Benutzername die betreffenden Variablen von bastla setzten...

Nun kommt aber die Fehlermeldung das es mit den Kennwortrichtlinien nicht hinhaut ... Warum auch immer ... setzte ich eine "12" vor den Namen der als Passwd verwendet wird , so funktioniert es ...

Wo kann ich denn die Kennwortrichtlinien für den Lokalen Rechner ändern ? o.O

Liebe Grüße von Yannosch ! face-smile
Member: colinardo
colinardo Sep 26, 2013 updated at 08:54:12 (UTC)
Goto Top
Hallo Janosch,
Zitat von @Yannosch:
Wo kann ich denn die Kennwortrichtlinien für den Lokalen Rechner ändern ? o.O
Wenn der PC in einer Domäne sitzt geht dies nur auf dem Domänencontroller der die Passwort-Richtlinie an die Computer verteilt, und da kommst du sicherlich nicht dran!

Falls der Rechner nicht in einer Domäne sitzten sollte, geht's so:
WIN+R > secpol.msc, dann in hier hin navigieren:
Kontorichtlinien > Kennwortrichtlinien > Kennwort muss den Komplexitätsvoraussetzungen entsprechen
Grüße Uwe