So, jetzt habe ich gerade ein wenig mehr Zeit, deshalb einmal kurz, was ich vorhin für eine Idee hatte:
Mit tasklist und find können wir schon mal den Prozessnamen eingrenzen. Führe ich eine VM aus und habe noch das VBox-GUI offen, so werden mir vier Prozesse ausgegeben. Hier wird mir unter anderem auch der Speicherverbrauch der Prozesse mit angezeigt. Sofern es sich bei dem System in der VM nicht um ein altes DOS oder eine ältere Linux-Distro handelt, können wir mit ziemlicher Sicherheit annehmen, dass derjenige Prozess mit dem höchsten Speicherverbrauch die VM ist. Meine Idee war es nun, anhand des Speicherverbrauchs eine weitere Filterung vorzunehmen. Der Rest deines Scriptes sollte dann (abhängig davon, was der VM-Prozess von VBox als success-Rückgabewert ist) so übernommen werden können.
Wie die Filterung funktioniert, das gilt es jetzt herauszufinden, wollte dir aber schonmal diesen kleinen Denkanstoß da lassen
EDITIERT:
Also, nach ein bisschen herumspielen, habe ich jetzt eine mögliche Lösung für dich auf der Powershell gefunden (als Admin ausführen!):
get-process | where {$_.name -eq "virtualbox"} | sort-object pm | select-object -last 1 | wait-process ; shutdown -s
Was macht dieser Befehl? Zunächst besorgen wir uns mit get-process die Prozessliste, welche wir anschließend mit where-object auf den gesuchten Namen eingrenzen (in unserem Fall "virtualbox"). Dies wird im laufenden Betrieb eine Liste mehrere Prozesse zurückliefern, weshalb wir anschließend selbige zunächst mit sort-object nach dem zugewiesenen Speicher (paged memory, pm) aufsteigend sortieren lassen und dann mit select-object auswählen. Nun wird dieses Prozess-Objekt noch an wait-process weitergereicht, welches nun auf die Beendigung des Prozesses wartet. Mit dem Semikolon beenden wir diese Zeile und geben den nächsten eigenständigen Befehl an, dieser wird erst ausgeführt, wenn wait-process beendet wurde.
Wenn du möchtest, kann ich dir nachher mal ein Script dafür schreiben und es hier anhängen.
EDITIERT:
Habe jetzt mal ein Skript geschrieben. Um es auszuführen, musst du bitte einen Rechtsklick darauf machen und dann "Mit PowerShell ausführen" wählen. Der Rest sollte, denke ich, selbsterklärend sein. Bei Bedarf darfst du das Skript natürlich für dich anpassen
EDITIERT:
Habe das Skript nochmal überarbeitet, gab ein paar Probleme mit Zugriffsrechten des Process-Objektes der laufenden VBox-Instanz. Sollte jetzt hoffentlich funktionieren...