
Ich versuche, eine geplante Aufgabe so einzurichten, dass genau einmal am Tag eine EXE-Datei ausgeführt wird. Ich habe Folgendes versucht:
Täglich um 4:00 Uhr auslösen: „Aufgabe so schnell wie möglich ausführen, nachdem ein geplanter Start verpasst wurde“
Dieser Ansatz funktioniert einwandfrei, wenn für mein Konto kein Kennwort festgelegt ist. In diesem Fall startet Windows direkt auf dem Desktop. Nach einer kurzen Verzögerung wird die Aufgabe ausgeführt.
Als ich meinem Konto ein Passwort hinzufügte, wurde die Aufgabe nicht mehr ausgeführt. Im Aufgabenverlauf sehe ich, dass Warnungen protokolliert werden:
Der Taskplaner hat Task „X“ nicht gestartet, da Benutzer „Y“ nicht angemeldet war, als die Startbedingungen erfüllt waren. Benutzeraktion: Stellen Sie sicher, dass der Benutzer angemeldet ist, oder ändern Sie die Taskdefinition, um den Start zuzulassen, wenn der Benutzer abgemeldet ist.
Das scheint eine dumme Warnung zu sein - unter den „Sicherheitsoptionen“ habe ich „Nur ausführen, wenn Benutzer angemeldet ist“ ausgewählt. Warum versucht der Taskplaner, die Aufgabe zu starten, bevor sich der Benutzer anmeldet?
Triggerung täglich um 4:00 Uhr und „bei Anmeldung“, Ausführung so bald wie möglich
Dieser Ansatz hatte nicht den Effekt, den ich beabsichtigt hatte, d.h. ich wolltebeideBedingungen, die erfüllt sein müssen, d. h. wenn „täglich nach 4:00 Uhr“ und „Anmelden“ erfüllt sind, dann wird die Aufgabe ausgeführt; und für jedes nachfolgende „Anmelden“-Ereignis an diesem Tag wird „täglich nach 4:00 Uhr“ nicht erfüllt sein, sodass bis zum nächsten Tag gewartet wird. So funktioniert der Taskplaner leider nicht, und bei diesem Ansatz wird die Aufgabe nachjedenEinloggen.
Wird ausgeführt, unabhängig davon, ob der Benutzer angemeldet ist oder nicht
Ich kann diesen Ansatz nicht verwenden, da die EXE, die ich ausführen möchte, nach Abschluss manchmal eine Benutzereingabe erfordert. Generell gibt es eine Reihe von Gründen, warum diese Option möglicherweise nicht verwendet werden kann.
Andere Optionen
Als verzweifelte Workarounds überlege ich, ein Batch-Skript zu schreiben, das in eine Datei schreibt und erkennt, ob es schon einmal aufgerufen wurde.
Es muss doch einen besseren Weg geben, diesen scheinbar alltäglichen und einfachen Planungsanwendungsfall umzusetzen?
Antwort1
Einmal täglich beim Anmelden eine Aufgabe ausführen
Ich versuche, eine geplante Aufgabe so einzurichten, dass genau einmal am Tag eine EXE-Datei ausgeführt wird.
Ich denke darüber nach, ein Batch-Skript zu schreiben, das in eine Datei schreibt und erkennen kann, ob es schon einmal aufgerufen wurde.
Okay, unten sehen Sie ein Beispiel mit einer sehr grundlegenden und simplen Batch-Skript-Logik, die, wie Sie in Ihrem Kommentar sagten, in Ihrem Fall je nach den Problemen, mit denen Sie konfrontiert sind, nützlich sein könnte.
Ich werde auch auf einen anderen Beitrag (am Ende dieser Antwort) zum Taskplaner mit Fallstricken usw. verweisen, nur für den Fall, dass Sie weitere Probleme mit dem Taskplaner haben, der beim Ausführen des Batch-Skripts nicht wie erwartet funktioniert. Auch wenn die Optionen, die Sie speziell in der Konfiguration auswählen, ebenso unterschiedlich sein können wie das Betriebssystem, sind die Fallstricke auf dieser Ebene wahrscheinlich immer noch dieselben. Werfen Sie also auch einen kurzen Blick auf diesen Beitrag, wenn Sie Probleme mit der Batchplanung haben, bei der der Taskplaner nicht wie erwartet funktioniert.
Grundlegende Skriptaufschlüsselung
Die
FOR /F
Schleife erstellt dieYYYYMMDD
für das aktuelle Datum zu verwendende Variable.Dies
CheckDir
ist ein lokaler Laufwerkspfad oder sogar ein UNC-Pfad, in\\servername\sharename\folder
den Sie diese kleine Prüfdatei mit demYYYYMMDD
Teil ihres Dateinamens täglich einfügen.- Ändern Sie einfach
C:\Path
den UNC-Pfad oder fügen Sie ihn dort ein, wo er in Ihrer Umgebung hinzeigen soll.
- Ändern Sie einfach
Dies
checkfile
ist NUR der Name der Datei mit dem%CheckDir%\
davor und dem%DT%
am Ende angehängten vor der Erweiterung .txt. Es gibt Ihnen beispielsweise ein Endergebnis vonC:\Path\VersionBackup_20130202.txt
für heute, wie in meinem Beispiel.- Dadurch wird im Wesentlichen geprüft, ob die Datei für heute vorhanden ist. Wenn ja, wird das Skript beendet. Wenn sie nicht vorhanden ist, wird sie erstellt und dann wird VersionBackup.exe oder der EXE-Name der Datei ausgeführt. Auf diese Weise kann dies mit dem Taskplaner so geplant werden, dass es einmal pro Stunde ausgeführt wird, wobei auf das Batch-Skript verwiesen wird. Gemäß der Batch-Skriptlogik darf es nur einmal pro Tag ausgeführt werden.
Es
START "" "C:\Path\VersionBackup.exe"
muss nur auf den vollständigen Pfad verwiesen werden, in dem der EXE-Name vorhanden ist, der den Versionssicherungsvorgang durchführt.
Batch-Skriptbeispiel
@ECHO ON
:::: SET YYYYMMDD format for date
FOR /F "TOKENS=2-4 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%C%%B%%A"
:SetCheckFile
SET CheckDir=C:\Path
SET checkfile=%CheckDir%\VersionBackup_%DT%.txt
IF NOT EXIST "%CheckDir%" MD "%CheckDir%"
IF EXIST "%checkfile%" GOTO EOF
ECHO Creating the check file for date %DT% to ensure only one Version Backup run for the day>>"%checkfile%"
:StartApp
START "" "C:\Path\VersionBackup.exe"
GOTO EOF
Antwort2
Legen Sie die EXE-Datei in einem der folgenden Ordner ab, um sie beim Hochfahren des Computers auszuführen. Sie müssen im Taskplaner nichts tun.
Nur für den aktuellen Benutzer:
C:\Benutzer\Benutzername\AppData\Roaming\Microsoft\Windows\Startmenü\Programme\Startup
Für alle Benutzer:
C:\ProgramData\Microsoft\Windows\Startmenü\Programme\Startup
Hoffe das hilft!