ciejay
Goto Top

Variablen von Batch zu VBS übergeben

Hallo liebe Com,

ich versuche mich gerade in der Batch und vbs Programmierung und bin daher sozusagen noch Anfänger.

Ich versuche nun mit einer Batch 2 Variable mittels Eingabe an eine vbs datei weiter zu geben

Ich habe bereits folgendes versucht.


test.bat

@echo off

winput "set name=$input" "Please enter name:"
winput "set password=$input" "Enter password:" /pass
::winput ist ein zustätzliches Tool um die Passworteingabe zu verbergen

start test.vbs name password
:: ich starte meine vbs und versuche dann die variable name und password an die vbs datei zu übergeben


Die erste Variable (also "name") wird an die vbs Datei übergeben jedoch die zweite nicht. Was mache ich falsch?
Ich hoffe ihr wisst Rat face-smile

Grüße
ciejay


PS: Ich benutze Win7 und Win8

Content-Key: 226726

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: colinardo
Solution colinardo Jan 15, 2014 updated at 09:54:00 (UTC)
Goto Top
Hallo ciejay, Willkommen im Forum!
das machst du folgendermaßen. In deiner VBS-Datei kannst du so Kommandozeilenparameter abfragen:
parameter1 = WScript.Arguments.Item(0)
parameter2 = WScript.Arguments.Item(1)
wscript.echo "Der Name lautet:" & parameter1  
wscript.echo "Das Passwort lautet: " & parameter2  
dein VBS-Script rufst du dann so aus deiner Batchdatei auf:
wscript.exe //NOLOGO //B test.vbs "%name%" "%password%" 
Die erste Variable (also "name") wird an die vbs Datei übergeben jedoch die zweite nicht. Was mache ich falsch?
Du meintest wohl eher (Anführungszeichen beachten; der Name und das Passwort könnten ja Leerzeichen beinhalten):
start test.vbs "%name%" "%password%"
Grüße Uwe
Member: ciejay
ciejay Jan 15, 2014 updated at 09:50:23 (UTC)
Goto Top
Hallo Uwe,

SUPER! face-smile hat funktioniert. Dickes danke.

Noch eine frage. Was bedeutet //NOLOGO

Gruß ciejay
Member: colinardo
Solution colinardo Jan 15, 2014 updated at 09:55:18 (UTC)
Goto Top
Zitat von @ciejay:
Noch eine frage. Was bedeutet NOLOGO
---------------------------
Windows Script Host
---------------------------
Syntax: WScript Skriptname.Erweiterung [Option...] [Argumente...]

Optionen:
 //B		Batch-Modus: Zeigt keine Skriptfehler und Aufforderungen an
 //D		Aktives Debuggen aktivieren
 //E:engine	Modul zum Ausführen des Skripts verwenden
 //H:CScript	Ändert den Standardskripthost auf CScript.exe um
 //H:WScript	Ändert den Standardskripthost auf WScript.exe um (Standard)
 //I		Interaktiver Modus (Standard; Gegenteil von //B)
 //Job:xxxx	Führt einen WSF-Auftrag aus
 //Logo		Zeigt das Logo an (Standard)
 //Nologo	Zeigt kein Logo an: Bei Ausführung wird kein Banner angezeigt
 //S		Speichert die aktuellen Befehlszeilenoptionen für diesen Benutzer
 //T:nn		Timeout in Sekunden:  Maximale Zeit, die ein Skript laufen darf
 //X		Führt das Skript im Debugger aus
für den Batchmodus könntest du noch den Parameter
B mit angeben

Grüße Uwe
Member: ciejay
ciejay Jan 15, 2014 at 10:54:21 (UTC)
Goto Top
Hallo Uwe,

habe doch noch ein Problem.
Ich schilder mal was das Programm können soll zum Verständnis.

Per vbs wurde durch die Eingabe von Benutzername und Passwort ein Netzlaufwerk automatisch verbunden.
Da aber weder in Batch noch vbs das Passwort verdeckt eingegeben werden kann (um vor neugierigen Blicken zu schützen) z.B. mit *Sternchen* habe ich nach einen weg gesucht um das zu erreichen. Somit bin ich zu Winput gekommen.

Die Batch sieht nun Dank deiner Hilfe so aus

test.bat
@echo

winput "set Name=$input" "Please enter name:"
winput "set password=$input" "Enter password:" /pass

wscript.exe //NOLOGO test.vbs "%Name%" "%password%"


test.vbs
Dim objNetwork
Set objNetwork = WScript.CreateObject("WScript.Network")

Name = WScript.Arguments.Item(0)
password = WScript.Arguments.Item(1)

Set fs = CreateObject("Scripting.FileSystemObject")

strLocalDrive = "Pfad Buchstabe"
If Not fs.DriveExists(strLocalDrive) Then
strRemoteShare = "Netzlaufwerkpfad"
objNetwork.MapNetworkDrive strLocalDrive, strRemoteShare, False, Name, password
End If

Set fs = Nothing


Sorry für die Formatierung. Ich wusste jetzt nicht genau wie man das ganze mit Nummerierung einfügt

Auf jedenfall wird das Laufwerk nach dem Ausführen angezeigt aber ich habe noch kein Zugriff drauf da die Parameter anscheinend nicht richtig mit Übergeben werden.
Evtl. hast du/ihr ja auvh eine einfachere Lösung

Gruß ciejay
Member: colinardo
colinardo Jan 15, 2014 updated at 11:33:56 (UTC)
Goto Top
mach das ganze doch direkt mit Powershell:
$cred = Get-Credential -Message "Bitte Benutzernamen und Kennwort für das Netzlaufwerk eingeben"  
if ($cred -ne $null){
    $user = $cred.GetNetworkCredential().UserName
    $pass = $cred.GetNetworkCredential().Password
    net use z: "\\server\share" /user:$user $pass  
}
dann hast du alles in einem face-wink Das zeigt dir den Standard-Windows Passwort-Dialog und mappt danach mit den Daten das Laufwerk.

Grüße Uwe

ps.s zur Code-Formatierung siehe: Code Formatierungen
Member: ciejay
ciejay Jan 15, 2014 updated at 11:46:00 (UTC)
Goto Top
Sieht auf den ersten blick um einiges Übersichtlicher aus.
Aber wie erstelle ich am schnellste so eine Powershell datei? Um eine Batch oder vbs zu erstellen habe ich jeweils eine .txt erstellt und die endung dann einfach in .bat oder .vbs geändert. Wie ist das in Powershell?
Member: colinardo
colinardo Jan 15, 2014 updated at 12:13:54 (UTC)
Goto Top
back-to-topAnleitung: Wie starte ich Powershell-Scripte
  • Zuerst speicherst man den Code in einer Textdatei mit der Endung .ps1.
  • Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole (powershell.exe) und gibt dort den Befehl Set-ExecutionPolicy RemoteSigned -Force ein. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden: Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
  • Jetzt kann das Powershell-Script in der Konsole mit Eingabe des Pfades der Scriptdatei, oder mit einem Rechtsklick auf die Script-Datei :Mit Powershell ausführen gestartet werden.
Member: ciejay
ciejay Jan 15, 2014 at 12:12:44 (UTC)
Goto Top
Mhm das is dann auch nicht die Optimale Lösung wenn man Powershell und das Script erst über die Konsole aktivieren muss. Vorallem braucht man dann auch Adminrechte. Wenn man keine hat wäre das somit schlecht.
Member: colinardo
Solution colinardo Jan 15, 2014 updated at 12:56:02 (UTC)
Goto Top
Zitat von @ciejay:
Mhm das is dann auch nicht die Optimale Lösung wenn man Powershell und das Script erst über die Konsole aktivieren muss.
Vorallem braucht man dann auch Adminrechte. Wenn man keine hat wäre das somit schlecht.
mit einem Set-ExecutionPolicy RemoteSigned -scope CurrentUser benötigt man keine Admin-Rechte.
Die Policy kann man ja mit einer GPO auf den Rechnern Global entsprechend konfigurieren...
Member: ciejay
ciejay Jan 15, 2014 at 12:55:59 (UTC)
Goto Top
Danke für die Antworten face-smile