Bat - VMware Dienste de- und aktivieren unter Berücksichtigung mehrerer VMs
Hallo,
hier ein Bat mit dem man die Dienste u. Netzwerkverbindungen von VM nur bei Bedarf einschaltet.
Hierzu kursieren ja eine Menge Beiträge im Netz.
Mein Problem war, daß wenn ich mehrere VMs laufen habe, und nur eine davon beende mir die Dienste
auch für die noch laufenden VMs beendet wurde.
Deshalb hier eine Erweiterung der kursierenden Beiträge um die Abfrage ob noch eine VM läuft.
Der Bat-File läßt sich sicher eleganter schreiben, (Hab z.B. auf eine zusätzliche Abfrage ob die Dienste
schon laufen verzichtet, ist aber unschädlich) funktioniert aber.
Das Ganze ist so angelegt, daß ich den Bat + devcon.exe in ein Verzeichnis kopiere. (Ist dann universeller,
kann man dann mitnehmen auf Rechner wo kein devcon existiert)
Aufruf
vmstart.bat "Lfw:\dein Pfad\deine VM.vmx"
vmstart.bat:
Ergebnis:
Wenn ich eine Testumgebung mit bspw. 3 VMs laufen habe und eine davon beende, bleiben die
Netzwerkverbindungen und Dienste bestehen. Erst wenn ich die letzte VM beende werden auch
die Netzwerkverbindungen und Dienste deaktiviert.
Viel Spaß, wie gesagt geht wahrscheinlich eleganter, aber funktioniert gut.
Gruß
Uwe
++++++++++++++++++++ Update ++++++++++++++++++++++
Zum Ende des Beitrags ist eine aktualisierte Version.
-> Bat - VMware Dienste de- und aktivieren unter Berücksichtigung mehrerer VMs
Mit eingedampften, übersichtlicherem Code.
Einfacher zum Anpassen an eigene Bedingungen
Update ++++++++++++++++++++++
hier ein Bat mit dem man die Dienste u. Netzwerkverbindungen von VM nur bei Bedarf einschaltet.
Hierzu kursieren ja eine Menge Beiträge im Netz.
Mein Problem war, daß wenn ich mehrere VMs laufen habe, und nur eine davon beende mir die Dienste
auch für die noch laufenden VMs beendet wurde.
Deshalb hier eine Erweiterung der kursierenden Beiträge um die Abfrage ob noch eine VM läuft.
Der Bat-File läßt sich sicher eleganter schreiben, (Hab z.B. auf eine zusätzliche Abfrage ob die Dienste
schon laufen verzichtet, ist aber unschädlich) funktioniert aber.
Das Ganze ist so angelegt, daß ich den Bat + devcon.exe in ein Verzeichnis kopiere. (Ist dann universeller,
kann man dann mitnehmen auf Rechner wo kein devcon existiert)
Aufruf
vmstart.bat "Lfw:\dein Pfad\deine VM.vmx"
vmstart.bat:
@echo off
rem __________ CMD-ProgrPfad festlegen (Ausgabe mit \)
set progrpfad=%~dp0
rem __________ devcon festlegen (devcon wurde vorher mit ins Verz. kopiert)
set devcon=%progrpfad%devcon.exe
:start
rem Abfrage ob Netzwerkverbindung VMnet1 + 8 aktiviert, werden ggf. eingeschaltet
rem --------------------------------------------------------------------------------------------------------------
"%devcon%" status @ROOT\VMWARE\0000 | find /I /C "running" >"%progrpfad%temp.txt"
for /F "usebackq" %%i in ("%progrpfad%temp.txt") do if %%i EQU 0 "%devcon%" enable @ROOT\VMWARE\0000
del "%progrpfad%temp.txt"
"%devcon%" status @ROOT\VMWARE\0001 | find /I /C "running" >"%progrpfad%temp.txt"
for /F "usebackq" %%i in ("%progrpfad%temp.txt") do if %%i EQU 0 "%devcon%" enable @ROOT\VMWARE\0001
del "%progrpfad%temp.txt"
net start VMnetDHCP
net start "VMware NAT Service"
net start VMUSBArbService
start /WAIT "" %1
:beenden
rem pruefen ob noch eine VM laueft, wenn ja Abbruch
rem ----------------------------------------------------------------
tasklist | find /I /C "vmplayer.exe" > "%progrpfad%temp.txt"
for /F "usebackq" %%i in ("%progrpfad%temp.txt") do if %%i NEQ 0 goto vmaktiv
del "%progrpfad%temp.txt"
net stop VMnetDHCP
net stop "VMware NAT Service"
net stop VMUSBArbService
"%devcon%" disable @ROOT\VMWARE\0000
"%devcon%" disable @ROOT\VMWARE\0001
goto ende
:vmaktiv
del "%progrpfad%temp.txt"
:ende
set progrpfad=
set devcon=
exit
Ergebnis:
Wenn ich eine Testumgebung mit bspw. 3 VMs laufen habe und eine davon beende, bleiben die
Netzwerkverbindungen und Dienste bestehen. Erst wenn ich die letzte VM beende werden auch
die Netzwerkverbindungen und Dienste deaktiviert.
Viel Spaß, wie gesagt geht wahrscheinlich eleganter, aber funktioniert gut.
Gruß
Uwe
++++++++++++++++++++ Update ++++++++++++++++++++++
Zum Ende des Beitrags ist eine aktualisierte Version.
-> Bat - VMware Dienste de- und aktivieren unter Berücksichtigung mehrerer VMs
Mit eingedampften, übersichtlicherem Code.
Einfacher zum Anpassen an eigene Bedingungen
Update ++++++++++++++++++++++
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 164357
Url: https://administrator.de/contentid/164357
Ausgedruckt am: 23.11.2024 um 08:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo ovu-p86!
Etwas verschlankt, dafür aber ungetestet:
Grüße
bastla
Etwas verschlankt, dafür aber ungetestet:
@echo off & setlocal
rem __________ devcon festlegen (devcon wurde vorher mit ins Verz. kopiert)
set devcon="%~dp0devcon.exe"
rem __________ Verbindungen festlegen
set "Verb=0000 0001"
rem Abfrage ob Netzwerkverbindungen aktiviert, werden ggf. eingeschaltet
rem --------------------------------------------------------------------------------------------------------------
for %%a in (%Verb%) do
for /f %%i in ('%devcon% status @ROOT\VMWARE\%%a^|find /I /C "running"') do if %%i==0 %devcon% enable @ROOT\VMWARE\%%a
)
net start VMnetDHCP
net start "VMware NAT Service"
net start VMUSBArbService
start /WAIT "" %1
rem pruefen ob noch eine VM laueft, wenn ja Abbruch
rem ----------------------------------------------------------------
for /f %%i in ('tasklist^| find /I /C "vmplayer.exe"') do if %%i NEQ 0 goto :eof
net stop VMnetDHCP
net stop "VMware NAT Service"
net stop VMUSBArbService
for %%a in (%Verb%) do %devcon% disable @ROOT\VMWARE\%%a
bastla
Hi,
schönes Teil.
Da du dich ja mit dem Batchen wohl häufiger beschäftigst, eine kleine Anmerkung:
Zur Unterscheidung von Uralt-Stapelverarbeitungsdinges, die überlicherweise alle .bat benamst waren, würde ich neuere Versionen, die grundsätzlich nur unter
NT-Systemen laufen, nur noch mit der Endung .cmd versehen. Dann meine ich (aber nur als Empfehlung), dass man Variablen nicht nach vonhandenen Programmen oder
internen Befehlen benennen sollte.
Und wenn du dann in der Zeile 20 den Start-Befehl mit dem ""-Parameter für den Titel vor das /WAIT rückst, (so wie gestern beschrieben), hast du eine weitere mögliche Fehlerquelle einfach eliminiert.
Gruß
schönes Teil.
Da du dich ja mit dem Batchen wohl häufiger beschäftigst, eine kleine Anmerkung:
Zur Unterscheidung von Uralt-Stapelverarbeitungsdinges, die überlicherweise alle .bat benamst waren, würde ich neuere Versionen, die grundsätzlich nur unter
NT-Systemen laufen, nur noch mit der Endung .cmd versehen. Dann meine ich (aber nur als Empfehlung), dass man Variablen nicht nach vonhandenen Programmen oder
internen Befehlen benennen sollte.
Und wenn du dann in der Zeile 20 den Start-Befehl mit dem ""-Parameter für den Titel vor das /WAIT rückst, (so wie gestern beschrieben), hast du eine weitere mögliche Fehlerquelle einfach eliminiert.
Gruß
[OT] @Biber
Grüße
bastla
P.S.: "Fastenzeit" fällt bei mir unter "Folklore" - und is daher nix für mich ...
[/OT]
Du verschlankt
Belieben zu scherzen? Das tu ich höchstens mal einem wehrlosen Bach an ... Grüße
bastla
P.S.: "Fastenzeit" fällt bei mir unter "Folklore" - und is daher nix für mich ...
[/OT]