manela
Goto Top

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

Content-Key: 31563

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

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

Member: Weiricth
Weiricth May 02, 2006 at 13:36:27 (UTC)
Goto Top
einfachste möglichkeit du speicherst es in ne txt und liest es wieder aus und fertig

Grüße

TomTom
Member: Karo
Karo May 02, 2006 at 13:47:19 (UTC)
Goto Top
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
Member: Biber
Biber May 02, 2006 at 14:02:38 (UTC)
Goto Top
Im Batch:
...
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
Im VBS..
'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...  
-oder-
call send_mail(wscript.arguments(0), wscript.arguments(1), "Systemwarnung","Eine festgelegte Warngrenze   
' ...as above...  

HTH
Biber
P.S. Wieso ist das im OffTopic????
Member: manela
manela May 03, 2006 at 07:08:46 (UTC)
Goto Top
Hallo Biber,

da Dein Vorschlag am verständlichsten war, hab ich ihn ausprobiert. Leider wird die Email nun gar nicht mehr verschickt.

Hier liste ich mal den Code auf. Habe ich noch etwas falsch?

Batch-Script

echo off
cscript //netlogo d:\systemmonitoring\mail_alert.vbs %1 %2 %3


VBS-Script

global_from = wscript.arguments(0)
global_to = wscript.arguments(1)
global_why = wscript.arguments(2)

call send_mail(global_from, global_to, global_why, "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


Vielen Dank & LG

Manuela
Member: Biber
Biber May 03, 2006 at 07:14:56 (UTC)
Goto Top
Moin Manuela,

versuch mal bitte, beim Aufruf des VBS-Schnipsels den Parameter "nologo" statt "netlogo" zu verwenden... face-wink

LG zurück

Biber,
der auch gerne und ausgiebig Tippfehler macht
Member: manela
manela May 03, 2006 at 07:25:24 (UTC)
Goto Top
Guten Morgen Biber,

sorry, für meinen Tippfehler. Leider funktioniert das Ganze auch nach der Korrektur nicht.

Ohne Variablen klappt der Emailversand schon. Das heißt also das das Mitgeben der Variablen in der Batch oder das Einlesen im VBScript (vermutlich) noch nicht funktionieren.

Hast Du noch eine Alternative zum Einlesen der Werte?

LG & Danke

Manu

P.S. Ist ja top, dass Du schon wieder online bist! face-smile
Member: Biber
Biber May 03, 2006 at 07:43:06 (UTC)
Goto Top
Tja, Manuela,

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  
... liefert beim Aufruf am CMD-Prompt folgendes:
(= 9:36:15  D:\temp=)
>cscript //nologo f:\mail_alerttest.vbs eins zwei drei
call send_mail(eins, zwei, Systemwarnung, drei)
...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:
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
Member: manela
manela May 03, 2006 at 08:33:27 (UTC)
Goto Top
Hallo Biber,

ich hatte noch ein paar logische Denkfehler bezüglich Absender und Empfänger der Email. Jetzt funktioniert es - suuuuuper! Vielen Dank schon mal.

Jetzt habe ich noch eine Frage...

Die beiden Variablen " & wscript.arguments(1) & " " & wscript.arguments(2) & " müssen in der Email in den Textbody hintereinander übernommen werden. Wie gebe ich das beim Befehl call send_mail korrekt an?

Ich habe es wie folgt probiert. Das klappt leider nicht.

global_from = "it@bms.de"
global_to = "it@bms.de"


call send_mail(global_from,global_to,wscript.arguments(0)," & wscript.arguments(1) & " " & wscript.arguments(2) & ")

'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


Wäre super, wenn Du mir da auch noch helfen könntest. Danach lasse ich Dich in Ruhe, versprochen... face-wink


LG, Manu
Member: Biber
Biber May 03, 2006 at 08:54:32 (UTC)
Goto Top
Ach was, Manuela,
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 
So sollte es also klappen, wenn die Parameter 1 und 2 "die richtigen" sind.

Gruß
Biber
Member: manela
manela May 03, 2006 at 09:11:05 (UTC)
Goto Top
Hurra! Es funktioniert genauso, wie ich mir das vorgestellt habe!

VIELEN HERZLICHEN DANK!

Wie hast Du denn Batch und VBScript gelernt? Mit Büchern, Foren? Kannst Du mir was empfehlen? Ich möchte mich da auch gerne fit machen.

LG, Manu face-smile face-smile face-smile
Member: Biber
Biber May 05, 2006 at 17:31:11 (UTC)
Goto Top
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
Member: manela
manela May 08, 2006 at 06:45:45 (UTC)
Goto Top
Hallo Biber,

vielen Dank für Deine zahlreichen Tipps! Ich werde sie beherzigen.

Also dann mal an die Arbeit... face-wink

Gruß, Manu