stefanx
Goto Top

Befehl aus einer Batch-Datei nach einer bestimmten Zeit abbrechen und mit dem nächsten fortfahren

Hallo zusammen!

Folgendes Problem:

Ich habe einen NT4 Server und eine NT4 Workstation virtualisiert. Nun sollen die VMs per Batch abends herunterfahren und gesichert werden.

Bei den NT4 Maschinen hab ich schon probiert die HAL.dll mit der aus dem SP6a zu ersetzen und den Reg Eintrag poweroffaftershutdown auf 1 zu setzen, damit die Maschine ohne manuelles ausschalten herunterfährt. Jedoch ohne Erfolg.

Nun habe ich das Problem das der stop Befehl von vmware-cmd auf einen Rückgabewert von VMWare Server 1.0.9 wartet und diesen nicht bekommt, weil die Maschine schließlich nicht aus geht.

Hat jmd. eine Idee was ich noch machen könnte?? Vllt. Timeout einbauen, damit er den nächsten Befehl abarbeiten kann (z.B. dann stop hard damit die Machine aus geht)??

Gruß, Stefan

Content-Key: 123145

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

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: bastla
bastla 20.08.2009 um 15:47:50 Uhr
Goto Top
Hallo .stefan und willkommen im Forum!

Die folgende Skizze soll zeigen, wie ein "Befehl" (eine weitere Batchdatei) gestartet und nach Ablauf der angegebenen Zeit abgebrochen werden könnte:
@echo off & setlocal
set "Dauer=20"  
::Einheiten: s=Sekunden, n=Minuten
set "Einheit=s"  

set G=%GetTime.vbs
set "Zeit=%temp%\Zeit.txt"  
set "Befehl=%temp%\Befehl.cmd"  

set "Titel=StillRunning"  
>%Befehl%  echo @echo off ^& setlocal
>>%Befehl% echo pause
>>%Befehl% echo del %Zeit%

>%G% echo WScript.Echo DateAdd("%Einheit%","%Dauer%",Now)  

for /f "delims=" %%i in ('cscript //nologo %G%') do set "Bis=%%i"  
>%Zeit% echo %Bis%

start "%Titel%" %Befehl%  
:Loop
set "Jetzt=%date% %time:~,8%"  
if exist %Zeit% if "%Jetzt%" lss "%Bis%" goto :loop  

if exist %Zeit% (
    echo Zeitablauf
    taskkill /f /fi "WINDOWTITLE eq %Titel% - %Befehl%">nul  
)
::aufräumen
del %G%
del %Befehl%
der %Zeit%

echo Es geht weiter
Hier wird tatsächlich nur der "pause"-Befehl (siehe Zeile 12) in einer, durch diesen Batch selbst erstellten, temporären Batchdatei ausgeführt. Soferne nicht innerhalb des vorgegebenen Zeitraumes von 20 Sekunden die "Pause" beendet (und dadurch in weiterer Folge die Datei %Zeit% gelöscht) wird, läuft der Batch weiter und beendet den Task der temporären Batchdatei.

Natürlich kann auch ein bestehender Batch aufgerufen werden (der Pfad muss dazu in %Befehl% stehen). Dieser Batch müsste dann sein Ende ebenfalls durch Löschen der Datei lt %Zeit% signalisieren.

Einschränkung: Bei einem Monatswechsel während der vorgegebenen Laufzeit des "Befehles" (also zB Start am 31.8. um 23:30, Laufzeit 50 Minuten) erfolgt sofort ein Abbruch (da der "Bis"-Zeitpunkt mit "01.09.2009 00:20:00" ermittelt würde und der Vergleichswert "31.08.2009 23:30:00" wegen der Art des Vergleiches "größer" wäre). Bei Bedarf ließe sich allerdings durch Umformatieren der Datumswerte auch diese Einschränkung beseitigen).

Grüße
bastla
Mitglied: stefanx
stefanx 26.08.2009 um 11:59:12 Uhr
Goto Top
Hallo

Erstmal Danke für deine Hilfe. Habe es jedoch jetzt anders gelöst und zwar mit PSTools. Davon verwende ich die PSShutdown.exe zum herunterfahren der VMs. War die einfachere Weg. ;)

Gruß, Stefan