Ich habe ein Windows- powershell
Skript, das den ganzen Tag über ausgeführt wird. Es wird task manager
jeden Morgen 5 Minuten nach Mitternacht gestartet, läuft als Anwendung (d. h. in einer powershell
Konsole auf meinem Desktop) und fährt sich dann jeden Abend etwa 5 Minuten vor Mitternacht selbst herunter.
Das Ausführen als Anwendung hat eine Reihe von Vorteilen. Ich kann sehr leicht erkennen, dass es ausgeführt wird, ich kann leicht erkennen, dass es funktioniert (durchgängige Meldungen, die über den Bildschirm laufen) und ich kann es ctrl+c
jederzeit durch Drücken von zu einem ordnungsgemäßen Herunterfahren zwingen.
Die Windows-Aufgabe, die dies initiiert, ist so konfiguriert, dass run only when user is logged on
dies in 99 % der Fälle in Ordnung ist, da mein Konto immer angemeldet ist. Diese Option bedeutet, dass die Aufgabe immer als Anwendung auf meinem Desktop ausgeführt wird.
Gelegentlich führt ein Stromausfall oder ein Update zu einem Neustart (Abmeldung von meinem Konto). Ich möchte, dass meine Powershell-Aufgabe neu gestartet wird, also habe ich der Aufgabe einen zweiten Trigger „beim Systemstart“ hinzugefügt. Experimente zeigen, dass diesnurfunktioniert, wenn die Option run only when user is logged on
in geändert wird run whether user is logged on or not
. Diese Option hat jedoch einen Haken, der Powershell-Prozess wird jetzt im Task-Manager als angezeigt background process
, nicht als app
. Jetzt läuft das Skript also nicht mehr in einem Fenster auf meinem Bildschirm, ich kann seinen Fortschritt nicht überwachen und es auch nicht sauber beenden ( task manager
gefolgt von End Task
ist meine einzige Option).
Ich möchte, dass der Task-Manager mein Skript immer als App und nicht als Hintergrundprozess ausführt. Daher möchte ich entweder
- Konfigurieren Sie den Task-Manager so, dass beim Neustart mein Konto angemeldet ist und das Skript als App gestartet wird, ODER
- Konfigurieren Sie den Task-Manager so, dass das Skript als App gestartet wird, WENN mein Konto angemeldet ist, und dass es als Hintergrundprozess gestartet wird, wenn mein Konto nicht angemeldet ist (z. B. nach einem Stromausfall).
Oder gibt es eine andere Lösung? Grundsätzlich muss das Skript ständig laufen und ich muss es in einem Fenster auf meinem Desktop laufen sehen können, damit ich sehen kann, was es tut.
Antwort1
OK, ich glaube, ich habe selbst eine Antwort gefunden.
Anstelle einer Aufgabe mit zwei verschiedenen Auslösern habe ich zwei unterschiedliche Versionen derselben Aufgabe erstellt, jeweils mit einem anderen Auslöser.
- Eines ist so eingestellt, dass es jeden Morgen 5 Minuten nach Mitternacht ausgeführt wird und ist auf eingestellt
run only when user is logged on
. Dies übernimmt 99 % der normalen Vorgänge - die Aufgabe wird als Vordergrundanwendung in einem Fenster auf meinem Desktop ausgeführt. - Das andere ist auf eingestellt
run at system startup
, dies ist auf eingestellt.run whether user is logged on or not
Dies kümmert sich um den sehr seltenen Fall, dass der Job nach einem ungeplanten Ausfall gestartet werden muss. Ok, es läuft als Hintergrundprozess, was nervig ist, aber immerhin läuft es!