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

VBScript - Problem beim Auslesen einer CSV-Datei

Frage Entwicklung Batch & Shell

Mitglied: TuXHunt3R

TuXHunt3R (Level 3) - Jetzt verbinden

19.04.2013, aktualisiert 01.05.2013, 2377 Aufrufe, 4 Kommentare

Guten Morgen

Ich habe ein kleines Problem mit meinem Loginscript (VBScript). Und zwar folgendes:

Ich habe eine CSV-Datei, wo drinsteht welcher Benutzer welche Netzlaufwerke erhält. Diese heisst "Laufwerke.csv" und ist nach folgendem Muster aufgebaut:


01.
USER;LWB;PATH 
02.
User1;G:;\\server1\share1 
03.
user1;L:;\\server1\share2 
04.
user1;M:;\\server2\share3 
05.
user2;O:;\\server3\share4
Nun habe ich ein VBScript, welches folgende Funktion enthält:

01.
Set wshNetwork = CreateObject("WScript.Network") 
02.
Set wshShell = CreateObject("Wscript.Shell") 
03.
Const adOpenStatic = 3 
04.
Const adLockOptimistic = 3 
05.
Const adCmdText = &H0001 
06.
Set objConnection = CreateObject("ADODB.Connection") 
07.
Set objRecordSet = CreateObject("ADODB.Recordset") 
08.
temp_path = wshShell.ExpandEnvironmentStrings("%temp%") 
09.
LWFilePath = temp_path & "\login" 
10.
 
11.
 
12.
 
13.
 
14.
wscript.echo "Öffne CSV-Datei zum Auslesen der Laufwerke..." 
15.
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
16.
          "Data Source=" & LWFilepath & ";" & _ 
17.
          "Extended Properties=""text;HDR=YES;FMT=Delimited""" 
18.
 
19.
objRecordset.Open "SELECT * FROM Laufwerke.csv", _ 
20.
          objConnection, adOpenStatic, adLockOptimistic, adCmdText 
21.
 
22.
if objRecordset.Recordcount <> 0 Then 
23.
	Do Until objRecordset.EOF 
24.
		if lcase(objRecordset.Fields.Item("USER")) = lcase(Username) Then 
25.
			LWB = objRecordset.Fields.Item("LWB") 
26.
			PATH = objRecordset.Fields.Item("PATH") 
27.
			wscript.echo "Verbinde Laufwerk " & LWB & " ---- " & PATH & "..." 
28.
			wshNetwork.MapNetworkDrive LWB, PATH, false 
29.
		End if 
30.
		objRecordset.MoveNext 
31.
	Loop 
32.
Else 
33.
	wscript.echo "Kein Eintrag für Laufwerke gefunden. Loginscript wird fortgesetzt." 
34.
End if
Das VBScript wird mittels einer Batch-Datei gestartet, die folgendermassen aussieht:
01.
@echo off 
02.
 
03.
echo ################################# 
04.
echo   Login FIRMA AG 
05.
echo ################################# 
06.
echo. 
07.
echo. 
08.
echo. 
09.
 
10.
echo Loesche lokal gespeichertes Loginscript... 
11.
if exist %temp%\login rmdir /s /q %temp%\login 
12.
 
13.
mkdir %temp%\login 
14.
 
15.
echo Kopiere aktuelles Loginscript... 
16.
copy \\ksdc01\netlogon\login.vbs %temp%\login 
17.
echo Kopiere aktuelle Laufwerksliste... 
18.
copy \\ksdc01\netlogon\laufwerke.csv %temp%\login 
19.
 
20.
echo Ueberpruefe Betriebssystem-Architektur... 
21.
 
22.
if exist %windir%\SysWOW64 goto :x64  
23.
 
24.
echo x86-Betriebssytem erkannt. 
25.
echo Starte eigentliches Loginscript... 
26.
ping -n 3 localhost >nul 
27.
cscript.exe %temp%\login\login.vbs //nologo 
28.
goto :end 
29.
 
30.
:x64 
31.
echo x64-Betriebssystem erkannt. 
32.
echo Starte eigentliches Loginscript... 
33.
ping -n 3 localhost >nul 
34.
%windir%\SysWOW64\cscript.exe %temp%\login\login.vbs //nologo  
35.
goto :end 
36.
 
37.
 
38.
 
39.
:end
Das VBScript selber und die CSV-Datei wird also in den temporären Ordner kopiert und von dort aus ausgeführt. Beim nächsten Login werden diese beiden Dateien wieder gelöscht und frisch kopiert.

Mein Problem ist nun folgendes:
Unter x64-Systemen (XP x64 und Windows 7 x64) funktioniert die obere Funktion nicht zum Auslesen der CSV-Dateien nicht (bei Windows XP 32 Bit ohne Probleme). Ich starte unter x64-Systemen das VBScript mittels der CScript.exe aus dem SysWOW64 Ordner, dann läuft die Funktion zwar durch, es kommt allerdings nicht an die Werte in der CSV, d.h. die Variablen "LWB" und "PATH" bleiben leer. Er ackert zwar die CSV-Datei einmal durch, füllt die Variablen allerdings nicht ab und verbindet kein einziges Laufwerk.

Wenn ich bei x64-Systemen nicht die CScript.exe aus dem SysWOW64-Ordner nehme, sondern einfach nur folgende Zeile in der Batchdatei angebe....

01.
cscript.exe %temp%\login\login.vbs //nologo
...dann gibt es eine Endlosschleife. Er ackert dann die CSV-Datei immer und immer wieder durch, bis man den Prozess cscript.exe über den Taskmanager abschiesst.

Ich bin mit meinem Latein am Ende. Wieso um Gates Willen will diese Funktion nicht sauber arbeiten auf x64-Systemen?
Habt ihr eine Ahnung?

Das Projekt liegt mir schon ca. ein halbes Jahr auf dem Magen und ich kann beim besten Willen keine Lösung finden.

Ich danke euch

Gruss
TuXHunT3R
Mitglied: colinardo
19.04.2013, aktualisiert um 11:04 Uhr
Hi TuXHunT3R,

wie wäre es wenn du anstatt des Datenbankobjektes zum extrahieren der Daten aus der CSV-Datei einfach ein universelles Auslesen(LineByLine) verwendest und die Zeilen in ein Array aufsplittest. So umgehst du das Problem wenn der Jet-Datenbanktreiber nicht in der richtigen Version auf dem jeweiligen Betriebssystem vorliegt.

01.
Const ForReading = 1 
02.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
03.
Set objTextFile = objFSO.OpenTextFile(LWFilepath, ForReading) 
04.
 
05.
Do Until objTextFile.AtEndOfStream 
06.
    strNextLine = objTextFile.Readline 
07.
    If strNextLine <> "" Then 
08.
    	arrMapping = Split(strNextLine , ";") 
09.
    	If LCase(arrMapping(0)) = LCase(Username) Then 
10.
    		LWB = arrMapping(1)  
11.
			PATH = arrMapping(2) 
12.
			wscript.echo "Verbinde Laufwerk " & LWB & " ---- " & PATH & "..."  
13.
			wshNetwork.MapNetworkDrive LWB, PATH, False 
14.
		End If	 
15.
    End If 
16.
Loop 
17.
 
wenn du aus welchen Gründen auch immer, jedoch bei der Datenbankmethode bleiben musst, könnte Dir folgender Artikel weiterhelfen. Dort ist in Lösung 4 die Rede davon das man die Jet-Datenbank-DLLs erneut auf dem 64-Bit System registrieren sollte.

Grüße Uwe
Bitte warten ..
Mitglied: 76109
19.04.2013 um 20:10 Uhr
Hallo TuXHunt3R!

Wo kommt im VBScript in Codezeile 24 der Username her?

Finde kein:
01.
Username = wshNetwork.UserName
Gruß Dieter
Bitte warten ..
Mitglied: TuXHunt3R
21.04.2013 um 22:50 Uhr
@colinardo:

Ich muss nicht bei der Datenbankmethode bleiben, das war einfach die schnellste Lösung, als ich das Script angefangen habe. Eine Funktion zum Einlesen der CSV in ein Array habe ich anno dazumals aus irgendeinem Grund, an den ich mich gerade nicht mehr erinnere, nicht zum Laufen gebracht. Ich habe mir aber so etwas gedacht (Jet-DB DLLs). Ich danke dir für den Vorschlag und werde es morgen früh gleich testen.


@76109:
Das ist in meinem Script schon drin, hier habe ich nur einen Schnipsel gepostet. Wenn das das Problem wäre, würde mein Script auf 32-Bit-Maschinen auch nicht laufen. Aber danke trotzdem.
Bitte warten ..
Mitglied: TuXHunt3R
01.05.2013 um 07:12 Uhr
Soooooooo..........

Ich habe es nun mittels der Array-Methode gemacht. Mein Code sieht nun so aus und funktioniert einwandfrei auf Windows XP x86, XP x64 und 7 x64:

01.
Set wshFso = CreateObject("Scripting.FileSystemObject") 
02.
Const ForReading = 1 
03.
temp_path = wshShell.ExpandEnvironmentStrings("%temp%") 
04.
Username = lcase(wshNetwork.UserName) 
05.
LWFilePath = temp_path & "\login\Laufwerke.csv" 
06.
Set objLWFile = wshFso.OpenTextFile(LWFilepath, ForReading) 
07.
 
08.
Do Until objLWFile.AtEndOfStream 
09.
    strNextLine = objLWFile.Readline 
10.
    If strNextLine <> "" Then 
11.
    	arrMapping = Split(strNextLine, ";") 
12.
    	If LCase(arrMapping(0)) = Username Then 
13.
    		LWB = arrMapping(1)  
14.
			PATH = arrMapping(2) 
15.
			wscript.echo "Verbinde Laufwerk " & LWB & " ---- " & PATH & "..."  
16.
			wshNetwork.MapNetworkDrive LWB, PATH, False 
17.
		End If	 
18.
    End If 
19.
Loop
Herzlichen Dank für eure Hilfe.

Gruss
TuXHunT3R
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
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 ...

Batch & Shell
CSV-Datei nach Excel importieren (5)

Frage von mrvfbnummer2 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...