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

VBS - Variable von Batch-Datei verwenden

Frage Entwicklung Batch & Shell

Mitglied: manela

manela (Level 1) - Jetzt verbinden

02.05.2006, aktualisiert 08.05.2006, 14272 Aufrufe, 12 Kommentare

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
Mitglied: Weiricth
02.05.2006 um 15:36 Uhr
einfachste möglichkeit du speicherst es in ne txt und liest es wieder aus und fertig

Grüße

TomTom
Bitte warten ..
Mitglied: Karo
02.05.2006 um 15:47 Uhr
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
' [0] 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
Bitte warten ..
Mitglied: Biber
02.05.2006 um 16:02 Uhr
Im Batch:
01.
... 
02.
REM set vara=%1  ------>erscheint mir überflüssig. 
03.
call d:\systemmonitoring\mail_alert.vbs %1 %2 %3 
04.
REM "call... "  ist nur sinnvoll, wenn der Batch noch weitergeht. 
05.
REM sonst: cscript //nologo d:\systemmonitoring\mail_alert.vbs %1 %2 %3
Im VBS..
01.
'VBS-Datei: 
02.
global_from = wscript.arguments(0) 
03.
global_to = wscript.arguments(1) 
04.
 
05.
call send_mail(global_from,global_to,"Systemwarnung","Eine festgelegte Warngrenze wurde überschritten") 
06.
' ... bisheriger Code...
-oder-
01.
call send_mail(wscript.arguments(0), wscript.arguments(1), "Systemwarnung","Eine festgelegte Warngrenze  
02.
' ...as above...
HTH
Biber
P.S. Wieso ist das im OffTopic????
Bitte warten ..
Mitglied: manela
03.05.2006 um 09:08 Uhr
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
Bitte warten ..
Mitglied: Biber
03.05.2006 um 09:14 Uhr
Moin Manuela,

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

LG zurück

Biber,
der auch gerne und ausgiebig Tippfehler macht
Bitte warten ..
Mitglied: manela
03.05.2006 um 09:25 Uhr
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!
Bitte warten ..
Mitglied: Biber
03.05.2006 um 09:43 Uhr
Tja, Manuela,

deshalb schreibe ich so gerne Oneliner - da lassen sich die Fehler schnell auf bestimmte Zeilen eingrenzen *gg

Also: mein Test:
01.
'------snipp Mail_alerttest.vbs 
02.
'VBS-Datei: 
03.
global_from = wscript.arguments(0) 
04.
global_to = wscript.arguments(1) 
05.
global_why = wscript.arguments(2) 
06.
wscript.echo "call send_mail(" & global_from & ", " & global_to &", Systemwarnung, " & global_why & ")" 
07.
'------snipp Mail_alerttest.vbs
... liefert beim Aufruf am CMD-Prompt folgendes:
01.
(= 9:36:15  D:\temp=) 
02.
>cscript //nologo f:\mail_alerttest.vbs eins zwei drei 
03.
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:
01.
echo off 
02.
echo cscript //nologo d:\systemmonitoring\mail_alert.vbs %1 %2 %3 
03.
Pause 
04.
cscript //nologo d:\systemmonitoring\mail_alert.vbs %1 %2 %3
...wüsste nicht, was da sonst schieflaufen könnte.
Grüße
Biber
Bitte warten ..
Mitglied: manela
03.05.2006 um 10:33 Uhr
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...


LG, Manu
Bitte warten ..
Mitglied: Biber
03.05.2006 um 10:54 Uhr
Ach was, Manuela,
brauchst mich nicht in Ruhe lassen...

Wenn die Argumente so übergeben werden:
01.
call send_mail( "it@bms.de", _   ' ---> wird Funktionsparameter mFrom 
02.
                       "it@bms.de", _   ' ---> wird Funktionsparameter mTo 
03.
                     "Das ist der Betreff",  _  ' ---> wird Funktionsparameter mSubject 
04.
                      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
Bitte warten ..
Mitglied: manela
03.05.2006 um 11:11 Uhr
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
Bitte warten ..
Mitglied: Biber
05.05.2006 um 19:31 Uhr
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
Bitte warten ..
Mitglied: manela
08.05.2006 um 08:45 Uhr
Hallo Biber,

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

Also dann mal an die Arbeit...

Gruß, Manu
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...