Task Scheduler says Ready but the task never ran: 3 silent causes on Windows

Windows Task Scheduler said "Ready" but my task never ran: three silent misses I found

"Ready" in Windows Task Scheduler only means the task is registered. It doesn't mean the task ran. I learned that from a monthly alert that had never been sent once since I set it up, while its status said Ready the whole time. Between July and September I found three different ways a task can sit there looking fine and do nothing: a date check that only lined up about once every seven months, a reboot that left the PC on but nobody logged in, and a pair of escaped quotes that killed a task the moment it started.

If you only need the checks, skip to "How I check whether a task really ran." The rest is how each one hid.

Miss 1: a monthly alert that fired zero times

The alert was meant to go out once a month, on the 1st. The script I used to register tasks (PowerShell) had no monthly trigger, so the setup became a weekly trigger on Mondays, plus a line at the top of the script that said: if today isn't the 1st, exit.

So the script only got past that line when the 1st of the month was also a Monday. That happens roughly once every seven months. In the time the alert had been deployed, there was exactly one such month.

And even that one run wouldn't have reached me. The alert sent its message through a webhook address that had never been put in my settings file, so every run stopped early with a warning.

I found the problem by checking the lock files. My daily jobs leave a small lock file when they run. The folder had 135 lock files from the daily jobs and zero from the monthly one.

I deleted the date check. The task now runs on the first Monday of each month, and a monthly lock file makes sure it runs only once. I also pointed it at my single notification script, and deleted the dead webhook path instead of keeping it as a fallback.

Miss 2: the PC was on, but nobody was logged in

One morning in July, four of my morning automations didn't run: three briefings and one other job. Nothing in Task Scheduler looked broken.

Windows Update restarted the PC at 06:33. I logged in at 09:09. My morning tasks were set to run only when I'm logged in, so every scheduled time between those two moments was skipped without a word.

The tasks had "Run task as soon as possible after a scheduled start is missed" turned on. On my PC, that setting only caught up runs missed while the PC was off. It did nothing for runs missed while the PC was on and sitting at the login screen.

My watchdog, which checks whether the morning jobs ran, sent an alert at 09:40. (I wrote about that daily check in my post on a Python script that failed in Task Scheduler.)

I added a small catch-up task that runs two minutes after I log in. It looks at a fixed list of 9 tasks. For each one, if today's scheduled time has already passed and the task's last run is from before that time, it starts the task. There's no AI in it, just a check and a start.

Miss 3: two escaped quotes, instant death

My Saturday weekly task failed on July 4 and again on July 18, each time right after it started. The result code was 0xFFFD0000. Task Scheduler can also show the same value as the negative number -196608.

The cause was in how the task had been registered. The Arguments field contained escaped quotes (\") around the script path. Task Scheduler passed those along, PowerShell couldn't find a script with that name, and the task ended immediately. I registered it again with plain quotes, and a test run returned 0.

This one needs a confession. Before I found the quotes, I had blamed that same -196608 on a different problem, a fake python from the Microsoft Store, in my Python post. That fake python was real and worth fixing, but it wasn't behind this code. I've added a correction to that post.

Right after registering a task, I now read back what Windows saved:

(Get-ScheduledTask -TaskName "YourTaskName").Actions

In my case, the escaped quotes in that field were enough to make the task fail while its status still said Ready.

How I check whether a task really ran

What I look atQuestionWhat "really ran" looks like
Something the task producesIs there a lock file, log line or message from today's run?A fresh file or line with today's time
Get-ScheduledTaskInfo LastRunTimeDid the last run happen at or after the last scheduled time?LastRunTime at or after the scheduled time
Restart time vs. login timeWas the PC restarted before my login on a day with misses?No scheduled time falls between the two
(Get-ScheduledTask).ActionsDoes the saved path have stray escaped quotes?The exact path I meant
The trigger and any date checks in the scriptCan the trigger and the script's own conditions both be true on the same day?Yes, on every day I expect it to run

When a morning job goes quiet, I go in this order: did the watchdog alert, what does LastRunTime say, then compare the restart time with my login time. For the restart time I look at the Windows event that records shutdowns and restarts (event ID 1074).

What I check now

I used to rely on the status column. Now I check the files, logs or messages a task leaves behind.

Before I build a new job on top of an existing automation, I also check that the existing one has actually run recently. If it's dead, a job attached to it dies with it.

FAQ

Why does Task Scheduler say Ready when my task never runs?
Ready means the task is registered and waiting for its trigger. It says nothing about whether past runs happened or worked. Check LastRunTime and something the task produces.

Does "Run task as soon as possible after a scheduled start is missed" catch every missed run?
Not on my PC. It caught runs missed while the PC was off. Runs for a task set to run only when I'm logged in were skipped while the PC was on but at the login screen. I added a catch-up task that runs after login.

What does result 0xFFFD0000 (-196608) mean for a PowerShell task?
In my case, PowerShell couldn't find the script because the Arguments field had escaped quotes around the path. After I re-registered the task with plain quotes, a test run returned 0. Read back (Get-ScheduledTask).Actions to check yours.

How do I run a task monthly if I only have a weekly trigger?
Don't combine a weekly trigger with "exit unless it's the 1st." With a Monday trigger, the script only gets past the date check when the 1st falls on a Monday. I run it on the first Monday and use a lock file so it runs once per month.

Comments

Popular posts from this blog

Python script works manually but not in Task Scheduler: the Microsoft Store python stub (and a daily alive check)

Schedule a weekly AI summary with Windows Task Scheduler (with a human OK step)

Codex vs Claude Code: which jobs I give each (3 months of work logs)

What not to automate with AI: my approval rule for money and irreversible actions

Telegram bot receives /start automatically: how it triggered my kill switch (one-line fix)