767 Benutzer online
29. März 2024, 15:49:23

Windows Community



Bewertung:
Zum Thema Windows runterfahren bei Beendigung eines Prozesses - Hallo,manchmal lasse ich in VirtualBox längere Arbeiten machen von Programmen die in der Lage sind den PC runterzufahren - das betrifft da erstmal nur die VM. N... im Bereich Windows 7 Forum
Autor Thema:

Windows runterfahren bei Beendigung eines Prozesses

 (Antworten: 17, Gelesen 8310 mal)

  • Windows 1.0
  • Beiträge: 6
Windows runterfahren bei Beendigung eines Prozesses
« am: 06. Januar 2015, 16:57:52 »
Hallo,

manchmal lasse ich in VirtualBox längere Arbeiten machen von Programmen die in der Lage sind den PC runterzufahren - das betrifft da erstmal nur die VM. Nun kann ich mit diesem Skript den Computer (den echten) runterfahren, wenn ein bestimmter Task nicht mehr vorhanden ist.

:loop
TASKLIST | FIND /i "notepad++.exe"
IF ERRORLEVEL 1 start "" "D:\song.mp3"
  sleep 60
goto loop

Hab das testweise mit notepad++.exe und dem Start einer MP3 versucht. Leider ist es nicht möglich das beenden der VM einzutragen, da sowohl das normale VirtualBox-Fenster (wo die ganzen VMs aufgelistet sind) als auch alle gestarteten VMs als VirtualBox.exe im Taskmanager (Reiter Prozesse) auftauchen und der Shutdownbefehl in der VM ja nur die VM, nicht aber das ganze Virtualbox beendet. Man könnte es evtl. so umbiegen, dass der Shutdown-Bevefhl ausgeführt wird wenn statt 2x VirtualBox.exe nur 1x gefunden wird, oder? Ist es auch möglich irgendwie direkt den Namen unter dem die VM im Taskmanager unter Anwendungen auftaucht einzutragen?

Alex

(auto)bot

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
« Antwort #1 am: 06. Januar 2015, 17:50:08 »
Tasklist liefert dir doch den Speicherverbauch eines Prozesses mit. Du könntest ggf. damit einschränken :wink
Ich muss hinterher mal schauen, ob ich dir vllt. mit der PowerShell helfen kann, aber aktuell habe ich grad keine Zeit dafür.

  • Windows 98SE
  • Beiträge: 996
« Antwort #2 am: 06. Januar 2015, 18:03:29 »
Wenn VirtualBox es nicht als Option vorsieht, beim Shutdown des Gasts auch den Host herunterzufahren, sehe ich schwarz...

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
« Antwort #3 am: 06. Januar 2015, 18:28:55 »
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 :wink

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 :wink

EDITIERT:

Habe das Skript nochmal überarbeitet, gab ein paar Probleme mit Zugriffsrechten des Process-Objektes der laufenden VBox-Instanz. Sollte jetzt hoffentlich funktionieren...
« Letzte Änderung: 07. Januar 2015, 15:13:14 von SB »

  • Windows 98SE
  • Beiträge: 996
« Antwort #4 am: 06. Januar 2015, 20:04:38 »
Man könnte ggf. auch die CPU-Auslastung feststellen, die durch die VM samt den bestimmten Programmen verursacht wird, und dann, wenn diese CPU-Last unterschritten wird, den PC z. B. mit AMP WinOff ("CPU Load") herunterfahren lassen...
go-windows.de

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
Re: Windows runterfahren bei Beendigung eines Prozesses
« Antwort #5 am: 06. Januar 2015, 20:13:42 »
Man könnte ggf. auch die CPU-Auslastung feststellen, die durch die VM samt den bestimmten Programmen verursacht wird, und dann, wenn diese CPU-Last unterschritten wird, den PC z. B. mit AMP WinOff ("CPU Load") herunterfahren lassen...
go-windows.de
Die Idee ist zwar gut, kränkt aber an einer ähnlichen Stelle, wie mein Vorschlag, den Speicherverbrauch als Indikator heranzuziehen: Während der Speicherverbrauch bei Betriebssystemen, welche nicht viel RAM verwenden (z.B. ältere Betriebssysteme) kein zuverlässiger Indikator ist, da in diesem Fall z.B. das GUI mehr RAM verbraucht, als die VM, so wird dein Vorschlag nicht funktionieren, wenn die VM und das System einfach nur im Idle sind. Das heißt nicht zwangsläufig, dass die Ausführung eines Vorganges in der VM bereits abgeschlossen ist, oder dass diese beendet wurde. Und in diesem Fall ist mir dann der Speicherverbrauch der sicherere Indikator...
Ich habe grad ein ganz anderen Problem: Ich habe schon ewig keine Skripte mehr für die Powershell geschrieben und muss mich grad mal wieder ein bisschen einarbeiten.

  • Windows 1.0
  • Beiträge: 6
« Antwort #6 am: 06. Januar 2015, 20:54:33 »
Lösungen mit CPU-Last oder RAM kenne ich, wenn auch als eigenständige Programme.

Ob das als Indikator läuft bin ich unsicher. In der VM läuft zwar ein Windows XP oder Windows 7. Wenn ich mir da mal im Taskmanager die Angaben zur CPU-Auslastung und RAM-Nutzung ansehe, schwanken die doch recht stark. Mal sind die kurz auf 0 (also CPU, nicht der RAM) dann wieder höher. Ob das als Indikator funktioniert bin ich unsicher.

Ich denke ein sicherer Punkt wäre statt nach einem Prozess VirtualBox.exe nach zweien zu suchen und den Rechner runterzufahren wenn nur noch einer da ist. Denke das ist deutlich sicherer.

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
« Antwort #7 am: 06. Januar 2015, 21:01:05 »
Schau mal, ob dir das Skript, welches ich eben hochgeladen habe, helfen kann.
Eine Anmerkung noch: Du solltest das Skript natürlich erst ausführen, wenn du die VM gestartet hast, sonst wird auf das Beenden der GUI gewartet und irgendwie glaube ich nicht, dass du das möchtest :wink

EDITIERT:

Musste das Skript nochmal anpassen, s. oben.
« Letzte Änderung: 07. Januar 2015, 15:14:00 von SB »

  • Windows 1.0
  • Beiträge: 6
« Antwort #8 am: 08. Januar 2015, 13:56:38 »
Muss jetzt nochmal fragen wonach das Skript sucht. Nach 2 VirtualBox-Prozessen oder nach RAM und/oder CPU-Auslastung?

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
« Antwort #9 am: 08. Januar 2015, 16:09:00 »
Das Skript sucht anhand des belegten Speichers (paged memory, pm) im RAM.

  • Windows 98SE
  • Beiträge: 996
Re: Windows runterfahren bei Beendigung eines Prozesses
« Antwort #10 am: 08. Januar 2015, 18:35:13 »
Und nach welcher Bedingung sucht es? Also, bei Eintritt welcher Bedingung wird der Host heruntergefahren?

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
« Antwort #11 am: 08. Januar 2015, 21:59:25 »
Und nach welcher Bedingung sucht es? Also, bei Eintritt welcher Bedingung wird der Host heruntergefahren?
Wird nicht zwangsweise heruntergefahren, es wird der Ausdruck ausgeführt, den der Benutzer angibt. Dieser wird ausgeführt, wenn der Prozess, auf den gewartet wird, beendet ist.
Für weitere Infos dazu schaue mal bitte hier nach :wink

  • Windows 1.0
  • Beiträge: 6
« Antwort #12 am: 10. Januar 2015, 23:33:04 »
Ich kann das leider nicht testen, da es den Button "Mit Powershell starten" nicht gibt. Hatteb mir mal einen Link gesucht wo das mit Registryänderung behoben wurde, geht aber nicht.

  • Moderator
  • Windows Me
  • Beiträge: 1943
  • "Windows as a Service"
« Antwort #13 am: 11. Januar 2015, 16:00:42 »
Ich kann das leider nicht testen, da es den Button "Mit Powershell starten" nicht gibt. Hatteb mir mal einen Link gesucht wo das mit Registryänderung behoben wurde, geht aber nicht.
Hast du das Skript vorher aus der ZIP-Datei entpackt? Wenn ja, sollte es bei einem Rechtsklick darauf gleich der zweite Eintrag von oben sein...

  • Windows 1.0
  • Beiträge: 6
« Antwort #14 am: 12. Januar 2015, 19:48:42 »
Ja, ist entpackt. Es gibt bei mir im Kontextmenü keinerlei Einträge zu Powershell.

windows virtual beenden automatisch gmx herunterfahren programm box beendet runterfahren
starten prozesse computer eines shutdown prozess win7 skript programmes loop