VBS - Variable von Batch-Datei verwenden
Hallo zusammen,
ich möchte gerne festgelegte Variablen aus einer Batch-Datei mit einem VBS-Script auslesen, in eine Email packen und weiter verschicken.
Es handelt sich um die Variablen vara, varb und varc (s. angehängter Quelltext). Die Variablen kommen von dem Windows-Onboard-Programm Systemmonitor (perfmon.exe). Das automatische Generieren der Email funktioniert nach der Installation des SMTP-Dienstes einwandfrei. Die Variablen werden auch korrekt an die Batch-Datei übergeben. Jetzt fehlt eben nur noch die Übergabe an VBS und dazu reichen meine Kenntnisse leider noch nicht aus.
Wie muss also die Syntax im VBS-Script lauten?
LG, Manuela
Batch-Datei:
echo off
SET vara=%1
SET varb=%2
SET varc=%3
call d:\systemmonitoring\mail_alert.vbs
SET vara=
SET varb=
SET varc=
VBS-Datei:
global_from = %1
global_to = %2
call send_mail(global_from,global_to,"Systemwarnung","Eine festgelegte Warngrenze wurde überschritten")
'Sending Email from a Script
Sub send_mail(mFrom, mTo, mSubject, mTextbody)
Set objEmail = CreateObject("CDO.Message")
objEmail.From = mFrom
objEmail.To = mTo
objEmail.Subject = mSubject
objEmail.Textbody = mTextbody
objEmail.Send
End Sub
ich möchte gerne festgelegte Variablen aus einer Batch-Datei mit einem VBS-Script auslesen, in eine Email packen und weiter verschicken.
Es handelt sich um die Variablen vara, varb und varc (s. angehängter Quelltext). Die Variablen kommen von dem Windows-Onboard-Programm Systemmonitor (perfmon.exe). Das automatische Generieren der Email funktioniert nach der Installation des SMTP-Dienstes einwandfrei. Die Variablen werden auch korrekt an die Batch-Datei übergeben. Jetzt fehlt eben nur noch die Übergabe an VBS und dazu reichen meine Kenntnisse leider noch nicht aus.
Wie muss also die Syntax im VBS-Script lauten?
LG, Manuela
Batch-Datei:
echo off
SET vara=%1
SET varb=%2
SET varc=%3
call d:\systemmonitoring\mail_alert.vbs
SET vara=
SET varb=
SET varc=
VBS-Datei:
global_from = %1
global_to = %2
call send_mail(global_from,global_to,"Systemwarnung","Eine festgelegte Warngrenze wurde überschritten")
'Sending Email from a Script
Sub send_mail(mFrom, mTo, mSubject, mTextbody)
Set objEmail = CreateObject("CDO.Message")
objEmail.From = mFrom
objEmail.To = mTo
objEmail.Subject = mSubject
objEmail.Textbody = mTextbody
objEmail.Send
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 31563
Url: https://administrator.de/contentid/31563
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
einfach mal auf die schnelle ohne Test von mir. Pass es einfach auf Deine Bedürfnisse an. Der Ansatz ist ein wenig anders. Die zu verwendenen Variablen werden aus einer Textdatei eingelesen.
Karo
'---------------------------------------------------------------------------------------
' Programm: EINLESEN.vbs
' Autor: Karo, 05/2006
' Aufruf: cscript Einlesen.vbs <dateiname.txt>
'
' Die Attribute werden aus einer Textdatei gelesen (Felder durch Semikolon getrennt).
'
' In der ersten Zeile der Eingabedatei stehen allgemeine Daten
' VarA
' [1] VarB
' [2] VarC
' usw.
'---------------------------------------------------------------------------------------
On Error resume next ' Fehler werden explizit abgefangen
Const ForReading = 1
Set objArgs = WScript.Arguments ' Aufrufparameter (Name der Textdatei)
Set WshShell = WScript.CreateObject( "WScript.Shell" )
If objArgs.Count <> 1 Then
WScript.Echo "Usage: 'EINLESEN <input file>'"
WScript.Quit (1)
End If
err=0
Set fso = CreateObject ("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile (objArgs.Item (0), ForReading, false)
If err.number <> 0 Then
WScript.Echo "Cannot open input file " & objArgs.Item (0)
WScript.Quit (1)
End If
' In einer Schleife werden Vars eingelesen und zugewiesen
Do While Not fp.AtEndOfStream
sInputLine = fp.ReadLine
If Left(sInputLine,1) <> ":" Then ' nur Zeilen betrachten, die nicht mit ":" beginnen
sVarWert = split (sInputLine, ";", -1, 1)
If err.number = 0 Then
objEmail.From = sVarWert(0)
objEmail.to = sVarWert(1)
objEmail.Subject = sVarWert(2)
' usw
Else
WshShell.LogEvent 2, "Failed to read some Vars of " + _
sVarWert(1)
err=0
End If
End If
Loop
einfach mal auf die schnelle ohne Test von mir. Pass es einfach auf Deine Bedürfnisse an. Der Ansatz ist ein wenig anders. Die zu verwendenen Variablen werden aus einer Textdatei eingelesen.
Karo
'---------------------------------------------------------------------------------------
' Programm: EINLESEN.vbs
' Autor: Karo, 05/2006
' Aufruf: cscript Einlesen.vbs <dateiname.txt>
'
' Die Attribute werden aus einer Textdatei gelesen (Felder durch Semikolon getrennt).
'
' In der ersten Zeile der Eingabedatei stehen allgemeine Daten
' VarA
' [1] VarB
' [2] VarC
' usw.
'---------------------------------------------------------------------------------------
On Error resume next ' Fehler werden explizit abgefangen
Const ForReading = 1
Set objArgs = WScript.Arguments ' Aufrufparameter (Name der Textdatei)
Set WshShell = WScript.CreateObject( "WScript.Shell" )
If objArgs.Count <> 1 Then
WScript.Echo "Usage: 'EINLESEN <input file>'"
WScript.Quit (1)
End If
err=0
Set fso = CreateObject ("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile (objArgs.Item (0), ForReading, false)
If err.number <> 0 Then
WScript.Echo "Cannot open input file " & objArgs.Item (0)
WScript.Quit (1)
End If
' In einer Schleife werden Vars eingelesen und zugewiesen
Do While Not fp.AtEndOfStream
sInputLine = fp.ReadLine
If Left(sInputLine,1) <> ":" Then ' nur Zeilen betrachten, die nicht mit ":" beginnen
sVarWert = split (sInputLine, ";", -1, 1)
If err.number = 0 Then
objEmail.From = sVarWert(0)
objEmail.to = sVarWert(1)
objEmail.Subject = sVarWert(2)
' usw
Else
WshShell.LogEvent 2, "Failed to read some Vars of " + _
sVarWert(1)
err=0
End If
End If
Loop
Im Batch:
Im VBS..
-oder-
HTH
Biber
P.S. Wieso ist das im OffTopic????
...
REM set vara=%1 ------>erscheint mir überflüssig.
call d:\systemmonitoring\mail_alert.vbs %1 %2 %3
REM "call... " ist nur sinnvoll, wenn der Batch noch weitergeht.
REM sonst: cscript //nologo d:\systemmonitoring\mail_alert.vbs %1 %2 %3
'VBS-Datei:
global_from = wscript.arguments(0)
global_to = wscript.arguments(1)
call send_mail(global_from,global_to,"Systemwarnung","Eine festgelegte Warngrenze wurde überschritten")
' ... bisheriger Code...
call send_mail(wscript.arguments(0), wscript.arguments(1), "Systemwarnung","Eine festgelegte Warngrenze
' ...as above...
HTH
Biber
P.S. Wieso ist das im OffTopic????
Tja, Manuela,
deshalb schreibe ich so gerne Oneliner - da lassen sich die Fehler schnell auf bestimmte Zeilen eingrenzen *gg
Also: mein Test:
... liefert beim Aufruf am CMD-Prompt folgendes:
...works as designed, wie wir Biber sagen.
Demnach kann es eigentlich nur noch sein, dass Dein Batch gar keine drei Aufrufparameter erhält.
Mach doch im Batch auch mal eine Debugzeile zusätzlich:
...wüsste nicht, was da sonst schieflaufen könnte.
Grüße
Biber
deshalb schreibe ich so gerne Oneliner - da lassen sich die Fehler schnell auf bestimmte Zeilen eingrenzen *gg
Also: mein Test:
'------snipp Mail_alerttest.vbs
'VBS-Datei:
global_from = wscript.arguments(0)
global_to = wscript.arguments(1)
global_why = wscript.arguments(2)
wscript.echo "call send_mail(" & global_from & ", " & global_to &", Systemwarnung, " & global_why & ")"
'------snipp Mail_alerttest.vbs
(= 9:36:15 D:\temp=)
>cscript //nologo f:\mail_alerttest.vbs eins zwei drei
call send_mail(eins, zwei, Systemwarnung, drei)
Demnach kann es eigentlich nur noch sein, dass Dein Batch gar keine drei Aufrufparameter erhält.
Mach doch im Batch auch mal eine Debugzeile zusätzlich:
echo off
echo cscript //nologo d:\systemmonitoring\mail_alert.vbs %1 %2 %3
Pause
cscript //nologo d:\systemmonitoring\mail_alert.vbs %1 %2 %3
...wüsste nicht, was da sonst schieflaufen könnte.
Grüße
Biber
Ach was, Manuela,
brauchst mich nicht in Ruhe lassen...
Wenn die Argumente so übergeben werden:
So sollte es also klappen, wenn die Parameter 1 und 2 "die richtigen" sind.
Gruß
Biber
brauchst mich nicht in Ruhe lassen...
Wenn die Argumente so übergeben werden:
call send_mail( "it@bms.de", _ ' ---> wird Funktionsparameter mFrom
"it@bms.de", _ ' ---> wird Funktionsparameter mTo
"Das ist der Betreff", _ ' ---> wird Funktionsparameter mSubject
wscript.arguments(1) & " " & wscript.arguments(2) ) ' ---> wird Funktionsparameter mBody
Gruß
Biber
Moin, Manu,
ganz schwere Frage.. habe ich lange dran gebrütet...
Also, meine persönliche Erfahrung wahrheitsgemäß, aber nur eingeschränkt auf andere übertragbar:
- Batch lernen aus Büchern - definitiv nein.
Da kenne ich nicht einmal welche. Falls es welche gibt. ich habe zu Hause ca. 60 Kochbücher, aber keines zu Batch oder Skriptsprachen.
- Batch lernen aus "fertigen" Beispielskripten und in Foren
Das schon eher... lernen aus veröffentlichten Codeschnipseln .. und es gibt auch einige wenige Seiten im Netz, auf denen Batch-Tutorials oder interaktive Batch-Kurse angeboten werden. Die Links dazu habe ich im Bereich "Batch & Shell" gepostet.
Bei VBS/JScript und "echten" Programmiersprachen ist es ein klein wenig anders... im Gegensatz zu Batch sollte man/frau das Grundkonzept, die Philosophie der Sprache verstehen. Z.B. den (vereinfachten) Objekt-Ansatz bei VB. Oder zumindest die grundsätzlichen Programmstrukturen im Blick behalten können, ohne sich dauernd bei handwerklichem Blendwerk zu verzetteln.
Da halte ich schon ein Buch/ein eBook/ein SelfXXX-Kurs für sinnvoll.. wobei die verwendete Sprache vollkommen nebensächlich ist.. es geht ja erstmal um Programmstrukturen und Pseudocode.
Da würde ich Dich auch erstmal auf die entsprechenden eingetragenen Links in den einzelnen Bereichen verweisen und empfehle auf jeden Fall zum Einstieg etwas deutschsprachiges (falls das Deine Muttersprache ist).
Zu allen Skript/Programmiersprachen und -Dialekten gibt es im Netz als downloadbare PDF-Dateien die Scripte diverser deutscher Unis. Die sind meist schnell zu finden mit "Tutorial" oder "Einstieg in" "Vorlesung" "NameDerSprache") ; "nur auf deutsch suchen" und bei den Sites auf Uni-Namen filtern (uni-erlangen.., uni-jena.., uni-kiel...).
Und ansonsten... nicht lesen...machen!
Für das erste Progrämmchen wirst Du Tage für eine Handvoll Zeilen brauchen.
Beim 10ten Schnipsel kannst Du nebenbei fernsehen UND telefonieren.
Grüße
Biber
ganz schwere Frage.. habe ich lange dran gebrütet...
Also, meine persönliche Erfahrung wahrheitsgemäß, aber nur eingeschränkt auf andere übertragbar:
- Batch lernen aus Büchern - definitiv nein.
Da kenne ich nicht einmal welche. Falls es welche gibt. ich habe zu Hause ca. 60 Kochbücher, aber keines zu Batch oder Skriptsprachen.
- Batch lernen aus "fertigen" Beispielskripten und in Foren
Das schon eher... lernen aus veröffentlichten Codeschnipseln .. und es gibt auch einige wenige Seiten im Netz, auf denen Batch-Tutorials oder interaktive Batch-Kurse angeboten werden. Die Links dazu habe ich im Bereich "Batch & Shell" gepostet.
Bei VBS/JScript und "echten" Programmiersprachen ist es ein klein wenig anders... im Gegensatz zu Batch sollte man/frau das Grundkonzept, die Philosophie der Sprache verstehen. Z.B. den (vereinfachten) Objekt-Ansatz bei VB. Oder zumindest die grundsätzlichen Programmstrukturen im Blick behalten können, ohne sich dauernd bei handwerklichem Blendwerk zu verzetteln.
Da halte ich schon ein Buch/ein eBook/ein SelfXXX-Kurs für sinnvoll.. wobei die verwendete Sprache vollkommen nebensächlich ist.. es geht ja erstmal um Programmstrukturen und Pseudocode.
Da würde ich Dich auch erstmal auf die entsprechenden eingetragenen Links in den einzelnen Bereichen verweisen und empfehle auf jeden Fall zum Einstieg etwas deutschsprachiges (falls das Deine Muttersprache ist).
Zu allen Skript/Programmiersprachen und -Dialekten gibt es im Netz als downloadbare PDF-Dateien die Scripte diverser deutscher Unis. Die sind meist schnell zu finden mit "Tutorial" oder "Einstieg in" "Vorlesung" "NameDerSprache") ; "nur auf deutsch suchen" und bei den Sites auf Uni-Namen filtern (uni-erlangen.., uni-jena.., uni-kiel...).
Und ansonsten... nicht lesen...machen!
Für das erste Progrämmchen wirst Du Tage für eine Handvoll Zeilen brauchen.
Beim 10ten Schnipsel kannst Du nebenbei fernsehen UND telefonieren.
Grüße
Biber