Nickname
Passwort | vergessen?

186 anonyme User

1 angemeldetes Mitglied


evinben
evinben
77156 Mitglieder freuen sich auf Dich!
Top-Aktivitäten
Sehen Sie hier, wer zu den aktivsten Mitgliedern der aktuellen Woche zählt:
In den Bereich Batch & Shell wechseln ..

Bat - VMware Dienste de- und aktivieren unter Berücksichtigung mehrerer VMs

Mitglied: ovu-p86
Geschrieben von ovu-p86 (Level 1 - Frischling)
Erstellt am 11.04.2011, um 16:58:45 Uhr, Permanent-ID: 164357
Dieser Beitrag wurde bisher 4374 mal aufgerufen und gilt als gelöst.
2 von 2 Mitgliedern fanden diese Anleitung hilfreich.
Hilfreich+2 hilfreichDruckenBeobachten
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:

01.
@echo off 
02.
rem __________ CMD-ProgrPfad festlegen (Ausgabe mit \) 
03.
set progrpfad=%~dp0 
04.
rem __________ devcon festlegen (devcon wurde vorher mit ins Verz. kopiert) 
05.
set devcon=%progrpfad%devcon.exe 
06.
 
07.
:start 
08.
rem  Abfrage ob Netzwerkverbindung VMnet1 + 8 aktiviert, werden ggf. eingeschaltet 
09.
rem -------------------------------------------------------------------------------------------------------------- 
10.
"%devcon%" status @ROOT\VMWARE\0000 | find /I /C "running" >"%progrpfad%temp.txt" 
11.
for /F "usebackq" %%i in ("%progrpfad%temp.txt") do if %%i EQU 0 "%devcon%" enable @ROOT\VMWARE\0000 
12.
del "%progrpfad%temp.txt" 
13.
"%devcon%" status @ROOT\VMWARE\0001 | find /I /C "running" >"%progrpfad%temp.txt" 
14.
for /F "usebackq" %%i in ("%progrpfad%temp.txt") do if %%i EQU 0 "%devcon%" enable @ROOT\VMWARE\0001 
15.
del "%progrpfad%temp.txt" 
16.
 
17.
net start VMnetDHCP 
18.
net start "VMware NAT Service" 
19.
net start VMUSBArbService 
20.
start /WAIT "" %1 
21.
 
22.
 
23.
:beenden 
24.
rem pruefen ob noch eine VM laueft, wenn ja Abbruch 
25.
rem ---------------------------------------------------------------- 
26.
tasklist | find /I /C "vmplayer.exe" > "%progrpfad%temp.txt" 
27.
for /F "usebackq" %%i in ("%progrpfad%temp.txt") do if %%i NEQ 0 goto vmaktiv 
28.
del "%progrpfad%temp.txt" 
29.
 
30.
net stop VMnetDHCP 
31.
net stop "VMware NAT Service" 
32.
net stop VMUSBArbService 
33.
 
34.
"%devcon%" disable @ROOT\VMWARE\0000 
35.
"%devcon%" disable @ROOT\VMWARE\0001 
36.
goto ende 
37.
 
38.
:vmaktiv 
39.
del "%progrpfad%temp.txt" 
40.
 
41.
:ende 
42.
set progrpfad= 
43.
set devcon= 
44.
exit 
45.
 


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.
-> http://www.administrator.de/Bat_-_VMware_ ...

Mit eingedampften, übersichtlicherem Code.
Einfacher zum Anpassen an eigene Bedingungen

++++++++++++++++++++ Update ++++++++++++++++++++++


Kommentar schreibenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
Diskussionsverlauf (18 Kommentare)
thread
bastla
Kommentar bastla schreibt am 11.04.2011, 17:31:02 Uhr
Hallo ovu-p86!

Etwas verschlankt, dafür aber ungetestet:
01.
@echo off & setlocal 
02.
rem __________ devcon festlegen (devcon wurde vorher mit ins Verz. kopiert) 
03.
set devcon="%~dp0devcon.exe" 
04.
rem __________ Verbindungen festlegen 
05.
set "Verb=0000 0001" 
06.
 
07.
rem  Abfrage ob Netzwerkverbindungen aktiviert, werden ggf. eingeschaltet 
08.
rem -------------------------------------------------------------------------------------------------------------- 
09.
for %%a in (%Verb%) do 
10.
    for /f %%i in ('%devcon% status @ROOT\VMWARE\%%a^|find /I /C "running"') do if %%i==0 %devcon% enable @ROOT\VMWARE\%%a 
11.
12.
 
13.
net start VMnetDHCP 
14.
net start "VMware NAT Service" 
15.
net start VMUSBArbService 
16.
start /WAIT "" %1 
17.
 
18.
rem pruefen ob noch eine VM laueft, wenn ja Abbruch 
19.
rem ---------------------------------------------------------------- 
20.
for /f %%i in ('tasklist^| find /I /C "vmplayer.exe"') do if %%i NEQ 0 goto :eof 
21.
 
22.
net stop VMnetDHCP 
23.
net stop "VMware NAT Service" 
24.
net stop VMUSBArbService 
25.
 
26.
for %%a in (%Verb%) do %devcon% disable @ROOT\VMWARE\%%a
Grüße
bastla
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
Biber
Kommentar Biber schreibt am 11.04.2011, 17:36:28 Uhr
[OT]@bastla
Zitat von bastla:

Etwas verschlankt, dafür aber ungetestet:

Du verschlankt, der Batch ungetestet?
Nur noch 12 Tage und der Rest von heute bis zum Ende der Fastenzeit... face-wink
[/OT]
@ovu-p86

Vielen Dank für das Bereitstellen deines Schnipsels.

Grüße
Biber
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
bastla
Kommentar bastla schreibt am 11.04.2011, 18:36:22 Uhr
[OT] @Biber
Du verschlankt
Belieben zu scherzen? Das tu ich höchstens mal einem wehrlosen Bach an ... face-wink

Grüße
bastla

P.S.: "Fastenzeit" fällt bei mir unter "Folklore" - und is daher nix für mich ...
[/OT]
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 12.04.2011, 17:17:52 Uhr
Hallo bastla,

danke für die Anregungen.

Der Script funktioniert so allerdings nicht komplett..
Insbesondere deine Zeile 9-10.

Hab aber deine Zeile 20 bei mir mit aufgenommen.

Das heißt: in meinem Script Zeile 26-28 gelöscht
und ersetzt durch
01.
for /f %%i in ('tasklist^| find /I /C "vmplayer.exe"') do if %%i NEQ 0 goto ende
sowie Zeilen 38-39 gelöscht.
Funktioniert.

Ich find solche Anregungen immer klasse, lernt man viel bei. Wenn Zeit werde ich noch mal
versuchen deine Zeilen 9-10 einzubinden.

Aber wie gesagt der am Anfang eingestellte Script funktioniert. Ist halt etwas länger.
Deshalb hau ich hier nicht noch mal den kompletten, modifizierten Script rein.

Dank.

Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
bastla
Kommentar bastla schreibt am 12.04.2011, 17:22:09 Uhr
Hallo ovu-p86!
Der Script funktioniert so allerdings nicht komplett..
Insbesondere deine Zeile 9-10.
Wenn Du vorübergehend aus dem "echo off" am Anfang ein "echo on" machst, kannst Du ja sehen, wo's klemmt ...

Grüße
bastla
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 12.04.2011, 17:40:59 Uhr
Hallo bastla,

hab ich gemacht.

Um weitere Fehlerquellen wegzulassen, hab ich auch zunächst das 1. for für Verb weggelassen und händisch eingegeben.

01.
for /f %%i in ('%devcon% status @ROOT\VMWARE\0000^|find /I /C "running"') do if %%i==0 %devcon% enable @ROOT\VMWARE\0000

wurde dann nicht richtig interpretiert. Habs auch mit "usebackq" probiert, u.s.w. z.T. wurde es nicht als Befehl interpretiert
oder %devcon% wurde entweder mit doppelten "" interpretiert oder im Pfad abgeschnitten.
Aber da fummle ich mich noch mal durch.

Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
bastla
Kommentar bastla schreibt am 12.04.2011, 17:47:12 Uhr
Hallo ovu-p86!

Aufgrund meiner Zeile 3 müsste in %devcon% der vollständige Pfad (ausnahmsweise) bereits unter Anführungszeichen stehen ...

Grüße
bastla
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 12.04.2011, 18:52:45 Uhr
Hallo bastla,

hab ich gemacht. Um zu testen, hab ich nur den Rumpf genommen, der mich interessiert.

Also:
01.
@echo on 
02.
set devcon="%~dp0devcon.exe" 
03.
for /f %%i in ('%devcon% status @ROOT\VMWARE\0000^|find /I /C "running"') do if %%i==0 %devcon% enable @ROOT\VMWARE\0000 
04.
pause 
05.
set devcon=

Ergebnis:
01.
D:\Eigene Dateien\test>set devcon="D:\Eigene Dateien\test\devcon.exe" 
02.
 
03.
D:\Eigene Dateien\test>for /F %i in ('"D:\Eigene Dateien\test\devcon.exe" status @ROOT\VMWARE\0000|find /I /C "running"') do if %i == 0 "D:\Eigene Dateien\test\devcon.exe" enable @ROOT\VMWARE\0000 
04.
Der Befehl "D:\Eigene" ist entweder falsch geschrieben oder konnte nicht gefunden werden. 
05.
 
06.
D:\Eigene Dateien\test>pause 
07.
Drücken Sie eine beliebige Taste . . .

Aber ich will nicht nerven, hast sicher interessantere Probleme zu lösen.
Mich macht sowas immer irre. Muß ich irgendwie noch hinkriegen.

Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
bastla
Kommentar bastla schreibt am 12.04.2011, 19:15:38 Uhr
Hallo ovu-p86!

Dann vielleicht so:
for /f %%i in ('call %devcon% status @ROOT\VMWARE\0000^|find /I /C "running"') do if %%i==0 %devcon% enable @ROOT\VMWARE\0000
Grüße
bastla
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 12.04.2011, 19:21:56 Uhr
Hallo bastla,

funktioniert. !!!!!

Danke

Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
99045
Kommentar 99045 schreibt am 11.04.2011, 17:45:52 Uhr
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ß
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
DerWoWusste
Kommentar DerWoWusste schreibt am 12.04.2011, 22:25:47 Uhr
Moin.
Mal nebenbei gefragt:
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.
Hab ich noch nie gehört - wer kennt dies Problem außer Dir?
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 12.04.2011, 23:29:55 Uhr
Hallo DerWoWusste,

vielleicht mißverständlich ausgedrückt.

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



Soll heißen:

Standardmäßig sind ja die ganzen Dienste eingeschaltet. Will man ja nicht, wenn man die VM gerade nicht nutzt.

Deshalb haben ja die Nutzer in den vielen kursierenden Beiträgen Scripte geschrieben,
die die VM über einen cmd aufrufen der im Prinzip so funktioniert:
net start - start /wait VM-Aufruf - net stop


Wenn ich mehrere VMs für eine Testumgebung aufrufe passiert folgendes:
1.VM -> net start - start / Wait VM1-Aufruf
2.VM -> net start - start / Wait VM2-Aufruf
3.VM -> net start - start / Wait VM3-Aufruf
(das mehrfache "net start" ist unschädlich)

Wenn ich jetzt z.B. die 3.VM schließe kommt
3.VM -> net stop

die 1. u. 2. VM haben den Dienst jetzt nicht mehr.
Und das war mein Problem.

Deshalb hab ich das hier um die Abfrage ergänzt, ob noch eine VM aktiv ist. Wenn ja wird der Dienst nicht
beendet. Ich kann mit den verbleibenden 2 VMs normal weiterarbeiten. Erst wenn ich die letzte VM schließe
werden die Dienste und VMnet1+8 beendet.

Nichts weltbewegendes, aber nützlich, wenn man eine Testumgebung mit mehreren VMs hat.


Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 13.04.2011, 02:41:27 Uhr
Hallo,

++++++++++ Update +++++++++++

hier nochmal eine Code-eingedampfte Version, die auch universeller zu nutzen ist.
Hab die Anregungen von "bastla" und "Kaputtnick" berücksicht bzw. eingebaut.

Das Ganze ist nach wie vor so angelegt, daß man den cmd + devcon.exe in ein beliebiges Verzeichnis kopiert.
(Ist dann universeller,kann man dann mitnehmen auf Rechner wo kein devcon existiert)

Der cmd ist jetzt kürzer, übersichtlicher angelegt und läßt sich einfacher an eigene Gegegenheiten anpassen.

Zum Anpassen, am Anfang unter :setting bei Bedarf die gewünschten Dienste und Netzwerkverbindungen sowie
den VMware-Prozeß editieren. Fertig.


vmstart.cmd

01.
@echo off 
02.
rem ______________________________________________________________________________________________________ 
03.
rem -  VMware Dienste + Netzwerkverbindungen de- und aktivieren unter Beruecksichtigung mehrerer VMs 
04.
rem --------------------------------------------------------------------------------------------------- 
05.
rem -  Diesen cmd und devcon.exe vorher in ein beliebiges Verzeichnis kopieren und von dort aufrufen 
06.
rem - 
07.
rem -  Aufruf: vmstart.cmd "Lfw:\dein Pfad\deine VM.vmx" 
08.
rem -  Also Verknuepfung zum vmstart.cmd erstellen und dann im Link ZIEL um "Lfw:\dein Pfad\deine VM.vmx"  
09.
rem -  ergaenzen. Zusaetzlich AUSFUEHREN "minimiert" im Link einstellen. 
10.
rem ______________________________________________________________________________________________________ 
11.
 
12.
:setting 
13.
rem ++++++++ gewuenschte Dienste hier festlegen, Liste bei Bedarf ergaenzen ++++++++++++++++++++++++ 
14.
set dienste=VMnetDHCP "VMware NAT Service" VMUSBArbService 
15.
 
16.
rem ++++++++ gewuenschte Netwerkverbindungen hier festlegen, Liste bei Bedarf ergaenzen +++++++++++++ 
17.
set "Verb=ROOT\VMWARE\0000 ROOT\VMWARE\0001" 
18.
 
19.
rem ++++++++ Prozessname der VMware, bei Bedarf aendern +++++++++++++++++++++++++++++++++++++++++++++ 
20.
set vm=vmplayer.exe 
21.
 
22.
 
23.
:start 
24.
set _devcon="%~dp0devcon.exe" 
25.
rem hier Abfrage ob Netzwerkverbindung aktiviert, wird ggf. eingeschaltet 
26.
rem --------------------------------------------------------------------- 
27.
for %%a in (%Verb%) do (for /f %%i in ('call %_devcon% status @%%a^|find /I /C "running"') do if %%i==0 %_devcon% enable @%%a) 
28.
 
29.
for %%a in (%dienste%) do net start %%a 
30.
start /WAIT "" %1 
31.
 
32.
:beenden 
33.
rem pruefen ob noch eine VM laueft, wenn ja Fehler 
34.
rem ---------------------------------------------- 
35.
for /f %%i in ('tasklist^| find /I /C "%vm%"') do if %%i NEQ 0 goto ende 
36.
 
37.
for %%a in (%dienste%) do net stop %%a 
38.
for %%a in (%Verb%) do %_devcon% disable @%%a 
39.
 
40.
:ende 
41.
set _devcon= 
42.
set dienste= 
43.
set Verb= 
44.
set vm= 
45.
exit

(Ist in einer Umgebung mit mehreren 3 VMs getestet und funktioniert)

Dank noch mal an "bastla" und "Kaputtnick". Hab ne Menge gelernt.
Was mich vor allem gestört hatte, war meine Steinzeit-Abfrage-Umleitung in eine .txt Datei.
Hatte zwar alles funktioniert aber trotzdem.
Jetzt reichts aber erst mal.


Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
miniversum
Kommentar miniversum schreibt am 15.04.2011, 15:13:03 Uhr
Was du noch etwas vereinfachen kannst ist:
for /f %%i in ('tasklist^| find /I /C "%vm%"') do if %%i NEQ 0 goto ende
zu
tasklist^| find /I /C "%vm%" >NUL 2>NUL && goto ende
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
ovu-p86
Kommentar ovu-p86 schreibt am 22.04.2011, 00:41:46 Uhr
Hallo miniversum,

danke für den Hinweis. Ist ja immer eine Herausforderung. Man lernt bei.

Hab das mal ersetzt.. Funktioniert leider so nicht in dem cmd. Worans liegt?
Ich laß das jetzt erstmal wie im +++ Update +++. Das funktioniert.

Gruß
Uwe
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
miniversum
Kommentar miniversum schreibt am 22.04.2011, 10:40:19 Uhr
Ach.. sorry. mein fehler. Das ist ja ein NEQ, dann so:
tasklist | find /I /C "%vm%" >NUL 2>NUL || goto ende
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
99045
Kommentar 99045 schreibt am 22.04.2011, 11:53:16 Uhr
Hi,

eigentlich müsste ja ein
tasklist | find /I /C "%vm%" >NUL 2>NUL || exit

reichen, denn wenn man die 1. Zeile so abändert
01.
@echo off & setlocal

ist das, was in :ende steht, überflüssig.

Bei mir liegt übrigens in allen Verzeichnissen der devinierten VMs eine *.lck-Datei mit 0 Byte, sobald eine Maschine gestartet ist. Wenn man das überprüft, wäre eigentlich dieses Script überflüssig.

Zum Steuern von Diensten gibt es übrigens das Dienstprogramm SC.

Gruß
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.