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

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

Anleitung Entwicklung Batch & Shell

Mitglied: ovu-p86

ovu-p86 (Level 1) - Jetzt verbinden

11.04.2011, aktualisiert 01.06.2011, 8308 Aufrufe, 18 Kommentare, 2 Danke

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

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

Update


Mitglied: bastla
11.04.2011 um 17:31 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
Bitte warten ..
Mitglied: Biber
11.04.2011 um 17:36 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...
[/OT]
@ovu-p86

Vielen Dank für das Bereitstellen deines Schnipsels.

Grüße
Biber
Bitte warten ..
Mitglied: 99045
11.04.2011 um 17:45 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ß
Bitte warten ..
Mitglied: bastla
11.04.2011 um 18:36 Uhr
[OT] @Biber
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]
Bitte warten ..
Mitglied: ovu-p86
12.04.2011 um 17:17 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
Bitte warten ..
Mitglied: bastla
12.04.2011 um 17:22 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
Bitte warten ..
Mitglied: ovu-p86
12.04.2011 um 17:40 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
Bitte warten ..
Mitglied: bastla
12.04.2011 um 17:47 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
Bitte warten ..
Mitglied: ovu-p86
12.04.2011 um 18:52 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
Bitte warten ..
Mitglied: bastla
12.04.2011 um 19:15 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
Bitte warten ..
Mitglied: ovu-p86
12.04.2011 um 19:21 Uhr
Hallo bastla,

funktioniert. !!!!!

Danke

Gruß
Uwe
Bitte warten ..
Mitglied: DerWoWusste
12.04.2011 um 22:25 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?
Bitte warten ..
Mitglied: ovu-p86
12.04.2011 um 23:29 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
Bitte warten ..
Mitglied: ovu-p86
13.04.2011 um 02:41 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
Bitte warten ..
Mitglied: miniversum
15.04.2011 um 15:13 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
Bitte warten ..
Mitglied: ovu-p86
22.04.2011 um 00:41 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
Bitte warten ..
Mitglied: miniversum
22.04.2011 um 10:40 Uhr
Ach.. sorry. mein fehler. Das ist ja ein NEQ, dann so:
tasklist | find /I /C "%vm%" >NUL 2>NUL || goto ende
Bitte warten ..
Mitglied: 99045
22.04.2011 um 11:53 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ß
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch zum bearbeiten mehrerer CSV (2)

Frage von Matzus87 zum Thema Batch & Shell ...

Hyper-V
gelöst HyperV - VMs weg finde nix mehr (7)

Frage von Nemonautilus zum Thema Hyper-V ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...