vmWare-VM über powershell steuern, nicht über Batch

tomm1984

Lt. Junior Grade
Registriert
Juni 2016
Beiträge
332
Verehrtes Forum.

Aufgrund geschätzter Hinweise stelle ich mein Skript von .bat auf .ps1 um. Leider gelingt mir die Steuerung der VM nicht bzw. nicht das Ausführen einer Batch, aus PowerShell heraus, mit Übergabe von Parametern (wenn es über eine .bat sein muss; aus PowerShell direkt heraus wäre mir lieber ... war eher meiner Verzweiflung geschuldet).

In der Batch hatte das so funktioniert:
Code:
%vmwareexe% -T ws suspend "%vmpath%%vmfolder%\%vmname%"

Keine dieser PowerShell-Zeilen tut:
Code:
        $myVmwareExePath Suspend-VM $myVmPath
        $myVmwareExePath -T -ws -stop $myVmPath
        cmd.exe -/c $myvmstopbatchpath "$myVmStopCommand $myvmpath"
        start-process "cmd.exe" "/c $myvmstopbatchpath $myVmStopCommand $myvmpath"

Ich habe auch gelesen, dass es ein vmxtoolkit gibt (https://github.com/bottkars/vmxtoolkit), würde es aber gern bei Board-Mitteln belassen, wenn möglich.

Wie immer: Danke für Support.
 
leider nein
1677049762139.png
 
was ist denn der Inhalt von $vmwareexe?

Beim zweiten Aufruf fehlen Anführungszeichen (da sind Leerzeichen im Pfad. Das war auch schon bei batch so...)
 
Also ich kenne das Cmdlet "Suspend-VM" nur aus der Richtung HyperV. Es gibt aber auch nach einer kurzen Suche auch ein Cmdlet von VmWare aus der "PowerCLI", hast du dieses Modul installiert?

powercli-core.readthedocs.io/en/latest/cmd_suspend.html
 
  • Gefällt mir
Reaktionen: Evil E-Lex
nimm mal das Hochkomma (Shift + #). Außerdem heißt die ausführbare Datei nicht nur vmrun, sondern vmrun.exe. Das muss also auch mit rein.
 
naja... vmrun ist vermutlich keine exe sondern der Ordnername?

Nochmal: was enthalten die Variablen $vmwareexe und $myVmwareExePath?
Das sieht mir irgendwie doppelt gemoppelt aus...

ein Beispiel (ich kenne die exe nicht, die du aufrufen willst):
PowerShell:
$vmwareexe = "C:\Program Files (x86)\Vmware\VMware Workstation\vmrun\vmware.exe"
& $vmwareexe Suspend-VM $myVmPath

oder halt direkt, ohne Variable für die exe:
PowerShell:
& "C:\Program Files (x86)\Vmware\VMware Workstation\vmrun\vmware.exe"  Suspend-VM $myVmPath
 
Ah, ok. Na dann:

PowerShell:
$vmwareexe = "C:\Program Files (x86)\Vmware\VMware Workstation\vmrun.exe"
& $vmwareexe Suspend-VM $myVmPath
Ergänzung ()

PS: wobei das auch nur geraten ist. vllt. enthält $vmwareExepath ja auch noch einen Parameter ... schwierig weil zu wenig info
 
Korben2206 schrieb:
1677054050585.png

Ergänzung ()

Korben2206 schrieb:
Nochmal: was enthalten die Variablen $vmwareexe und $myVmwareExePath?
Das sieht mir irgendwie doppelt gemoppelt aus...
moment, vielleicht ein missverständnis ... gestern hatte ich alle variablen auf "my..." umgestellt. vielleicht habe ich etwas übersehen.

Code:
$myVmPath = $myVmFolderPath+"\"+$myVmVmx
...ist der komplette Pfad zur VM, sprich zur .vmx-Datei

$vmPath => hätte $myVmPath sein sollen; habe ich korrigiert

Code:
$myVmwareExePath="C:\Program Files (x86)\VMware\VMware Workstation\vmrun"
...Pfad zur vmware.exe
 
JulianHD schrieb:
Also ich kenne das Cmdlet "Suspend-VM" nur aus der Richtung HyperV.
Das dürfte auch der Fehler sein. Die Parameter der vmrun.exe unterscheiden sich natürlich zwischen PowerShell und cmd nicht. Es wird ja die gleiche EXE-Datei aufgerufen.
Das erklärt auch die Fehlermeldung
Error: Unrecognized command: Suspend-VM
Die kommt von vmrun.exe, nicht von der PowerShell.
 
  • Gefällt mir
Reaktionen: CheersItsJulsn
Ich würde deshalb einfach einmal versuchen der EXE den Command "suspend" zu übergeben statt "Suspend-VM":

$vmwareexe = "C:\Program Files (x86)\Vmware\VMware Workstation\vmrun.exe"
& $vmwareexe suspend $myVmPath
 
wow! sehr cool. vielen lieben Dank! ...das hat funktioniert
Ergänzung ()

...interessanterweise dauert es jeweils (suspend sowie start) 5 Sekunden, bis VmWare Workstation zuckt, aber es gut (bei batch hatte konnte man das sofort sehen ... aber nebensächlich)
 

Ähnliche Themen

Zurück
Oben