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

CMD-Ergebnis in Variable speichern und diese Variable dann andere Batchdatei übergeben

Frage Entwicklung Batch & Shell

Mitglied: torillo

torillo (Level 1) - Jetzt verbinden

14.02.2014 um 14:25 Uhr, 1976 Aufrufe, 6 Kommentare

Hallo Forum,

ich habe ein Problem mit der Übergabe einer Variable von einer in eine andere Batchdatei und würde mich über Eure Hilfe freuen.

Folgendes sollen die Batchdateien machen:
1. Schauen, ob ein Dienst läuft
2a. Wenn er läuft abschalten und eine Mail per Blat versenden
2b. Wenn er nicht läuft starten und eine Mail per Blat versenden

Dabei würde ich gerne die Ergebnisse der Befehle "net start Dienstname" bzw. "net stop Dienstname", also "Dienstname wurde erfolgreich gestartet" bzw. "Dienstname wurde erfolgreich gestoppt" in den Mailbody schreiben lassen. Das könnte ich ja auch manuell in den Mailbody reinschreiben, aber dann weiß ich nicht, ob der Dienst wirklich gestartet/gestoppt wurde.

Hier nun die Batchdateien:

1. Batchdatei zum Dienst starten/stoppen:
@echo off
REM nachsehen, ob der Dienst läuft
net start|find /i "Dienstname"

REM Wenn der Dienst läuft errorlevel ist gleich 0 (also kein Fehler/Error), wenn er nicht läuft errorlevel ist gleich 1 (also Fehler/Error)
If errorlevel 1 (

REM Wenn Fehler (errorlevel=1), also Dienst läuft nicht, dann Dienst starten und Start-Mail versenden
for /f "tokens=*" %%i in ('net start "Dienstname"') do set gestartet=%%i
call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net start: %gestartet%"
) else (

REM Wenn kein Fehler (errorlevel=0), also Dienst läuft, dann Dienst stoppen und Stop-Mail versenden
for /f "tokens=*" %%i in ('net stop "Dienstname"') do set gestoppt=%%i
call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net stop: %gestoppt%"
)

2. Und hier die Batchdatei für den Mailversand per Blat, MailOhneAnhang.cmd:
C:\scripts\blat\full\blat.exe -to empaenger@domain.de ^
-f absender@domain.de ^
-u user -pw passwort -server smtp.domain.de ^
-s %1 ^
-body %2%

Die Mails kommen an mit passendem Betreff und im Mailbody steht:"Mailbody: Ergebnis net start" bzw. "Mailbody: Ergebnis net stop", aber die Variable %gestartet% bzw. %gestoppt% wird nicht angezeigt.

Hat jemand einen Rat, woran es liegen könnte?

Vielen Dank schon im Voraus!
Mitglied: Clijsters
14.02.2014 um 14:48 Uhr
Hi,
einen Rat, eine Idee tatsächlich:

Du versuchst innerhalb einer for-loop eine Variable zu setzen und weiterzugeben.
Hier gibt's genaueres dazu:
http://www.robvanderwoude.com/variableexpansion.php

Das wurde hier im Forum auch bereits mehrfach besprochen, wenn ich mich nicht irre.
Aber das ist kein Problem, ich habe selber gerade mal gesucht und keinen Beitrag dazu auf die Schnelle finden können.

Beste Grüße
Dominique
Bitte warten ..
Mitglied: bastla
14.02.2014 um 15:28 Uhr
Hallo torillo!

Wenn die Variablen %gestartet% bzw %gestoppt% keine weitere Funktion haben, kannst Du sie auch gleich einsparen:
01.
If errorlevel 1 ( 
02.
    REM Wenn Fehler (errorlevel=1), also Dienst läuft nicht, dann Dienst starten und Start-Mail versenden 
03.
    for /f "tokens=*" %%i in ('net start "Dienstname"^|find "erfolgreich"') do call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net start: %%i" 
04.
) else ( 
05.
    REM Wenn kein Fehler (errorlevel=0), also Dienst läuft, dann Dienst stoppen und Stop-Mail versenden 
06.
    for /f "tokens=*" %%i in ('net stop "Dienstname"^|find "erfolgreich"') do call C:\Scripts\MailOhneAnhang.cmd "Mailsubject: Dienstname gestartet am %date% um %time% Uhr" "Mailbody: Ergebnis net stop: %%i" 
07.
)
Falls das Starten oder Stoppen nicht funktioniert, bekommst Du allerdings keine Ausgabe auf STDOUT (Kanal 1) sondern auf STDERR (Kanal 2) und somit auch keine Mail - daher könntest Du als Alternative jede Ausgabe in eine Datei umleiten und diese als Mailbody verwenden:
net start "Dienstname" >Ergebnis.txt 2>&1
Grüße
bastla
Bitte warten ..
Mitglied: torillo
14.02.2014 um 17:19 Uhr
Hallo und danke euch zwei für die Antworten. Der Vorschlag von Dir, bastla, sieht/sah für mich aus, kurzfristig zu einer Lösung zu kommen. Hab das dann so umgesetzt mit der Ergebnis.txt. Allerdings kann Blat aus welchen Gründen auch immer nicht auf die Datei zugreifen. Aber nur dann, wenn ich tatsächlich einen Dienst starte/stoppe in der Batch. Dann kommt in Blat der Fehler "Unkwon error 2 when trying to open ergebnis.txt". Wenn ich "net start" oder "net stop" durch ein "net start|find" ersetze, also nur gucke, ob der Dienst läuft, ist der Zugriff/Versand der Mail mit der Ergebnis.txt im Mailbody möglich. Also quasi dann, wenn eine Aktion ausgeführt wird, für die die CMD mit Adminrechten ausgeführt werden muss, geht der Zugriff auf Ergebnis.txt nicht. Dann kann man die Datei auch nicht ändern und unter gleichem Namen speichern.

Vielleicht hat jemand dazu noch einen Tipp?

Danke vielmals!!!
Bitte warten ..
Mitglied: torillo
14.02.2014 um 17:33 Uhr
Noch ein kurzer Nachtrag:

Wenn ich wie oben beschrieben, KEINE Aktion der Batchdatei ausführe, die - ausgeführt in einer CMD - Administratorrechte benötigt und die Batchdatei dann "normal" starte (also nicht mit "Ausführen als Administrator"), funktionierts einwandfrei. Nur wenn ich die Batch "Als Administrator ausführe" kommen die oben beschriebenen Fehler.

Da die Batch aber mit Adminrechten ausgeführt werden muss, weil sonst net start bzw. net stop nicht ausgeführt werden, beißt sich die Katze hier in den ###...

Für jeden Tipp bin sehr dankbar!!!!

Torillo
Bitte warten ..
Mitglied: bastla
14.02.2014 um 18:06 Uhr
Hallo torillo!

Speichere die Datei "Ergebnis.txt" in einem Ordner, für den "Jeder" zumindest Lesezugriff hat ...

Grüße
bastla
Bitte warten ..
Mitglied: torillo
17.02.2014 um 10:18 Uhr
Hallo bastla,

leider hat das nichts genützt mit den Berechtigungen, ich propiere es jetzt nochmal auf einem anderen Rechner ...

Danke für Deine Hilfe!

Torillo
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

PHP
gelöst HTML Dropdownmenü auslesen und in PHP als Variable übergeben (35)

Frage von ITFlori zum Thema PHP ...

Batch & Shell
gelöst Ergebnis von Variable wird nicht weitergegeben. Lösungsvorschlag? (5)

Frage von Enivois zum Thema Batch & Shell ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

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 ...