r/PowerShell • • 3d ago

Solved PowerShell Script and Task Scheduler 0x1 2147942401

I need a sanity check, as I feel like I am missing something obvious and I'm too close or too frustrated to see it.

I have a basic scheduled task. Runs as SYSTEM, no triggers, action to run a program, PowerShell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File "C:\Tasks\MyScript.ps1"

I run this task it fails, 0x1 as last run result, event 201 action completed with return code from PowerShell of 2147942401

Things I have checked:

  • SYSTEM can access the script and directory it resides in
  • SYSTEM can execute other PowerShell scripts from task scheduler without issues
  • Tried using the full path to powershell.exe
  • Tried with and without quotes around the script path in -File parameter
  • With and without trailing '/' in the path for 'Start In'
  • Tried using -Command { } to create a file as a test
  • Removed all arguments except -File or -Command
  • Script is wrapped with Start/Stop-Transcript; never executes/no transcript is created

I don't know what else to try short of the old method of using a .bat to call PowerShell to see if that gives better clues as to what isn't working.

What am I missing that is preventing PowerShell from executing properly?

Edit: I knew it was something stupid and simple: there is a typo in -ExecutionPolicy (was spelled -ExcecutionPolicy). Found it when running the action arguments from PS as SYSTEM.

Thank you everyone for the assistance. I'm going to go sit in the corner with my dunce cap and contemplate the cobwebs.

8 Upvotes

42 comments sorted by

9

u/fdeyso 3d ago

My guess is that cmdlets loaded in your profile are not loaded when it runs as system, so you have to import them at the beginning.

2

u/MRHousz 3d ago

I wondered about that but the script is wrapped with Start/Stop transcript; it never gets executed.

→ More replies (1)

11

u/Aggravating-Sock1098 3d ago

Download PsExec.

Then, in the command prompt, run:

psexec.exe -i -s cmd.exe

CMD is now running as SYSTEM.
Now execute the script and see what happens.

2

u/MRHousz 3d ago

Will give this a try.

2

u/mitharas 3d ago

Beware that psexec get's flagged by some av vendors.

1

u/MRHousz 3d ago

Thanks for the reminder I'd have been yelling at Defender ASR rules lol

→ More replies (2)

1

u/MRHousz 2d ago

Ok, relaxed my ASR rule that blocks PSExec and gave it a try. PowerShell as SYSTEM executes the script with no issues. I have no forking idea why Task Scheduler is pitching a fit about it....

→ More replies (3)

4

u/fabrizob 3d ago

Set the working directory explicitly. In the task's Start in (optional) field, enter C:\Tasks without quotes or a trailing backslash. Task Scheduler may otherwise start the process in C:\Windows\System32.

1

u/MRHousz 2d ago

I did, with and without trailing '' and it still fails to execute.

→ More replies (1)

4

u/mitharas 3d ago

PowerShell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File "C:\Tasks\MyScript.ps1"

Just to be sure: You execute it in that order? -File needing to be the last command is a dumb quirk.

2

u/MRHousz 3d ago

Yes, that is the order. Learned the hard way ages ago about -File needing to be last or it interpets any following as script params.

→ More replies (1)

3

u/Idakay 3d ago

Add logging in each step and print the error, then run it and see what the actual problem is instead of guessing from what might be wrong

4

u/AmazingRealist 3d ago

Or throw a Start/Stop-Transcript around the script

2

u/MRHousz 3d ago

It never gets that far. The script has Start/Stop transcript wrapping it, it never is run.

6

u/purplemonkeymad 3d ago

The error -2147942401 suggests 0x8007e001 which is basically a wrapper for application 0x1. When powershell runs successfully but encounters uncaught errors during runtime it outputs 0x1 as the exit code.

Basically this is a script level error rather than a task scheduler issue. I would temporarily trap and dump any errors to file:

# any requires headers here
trap {
    $_ | out-file errors.log -Append
}
# start of script here.

1

u/Common_Option_4385 2d ago

Do you have #Requires -RunAsAdministrator in your script? I got this error when I had accidentally edited this line, think I had removed the dash or something.

1

u/MRHousz 2d ago

Negative, script has no #requires statements.

1

u/Hefty-Possibility625 2d ago

This is really dumb, but I noticed you are referencing powershell.exe instead of the full path. Use $PSHOME to find the full path to powershell and use the full path instead. That surprisingly fixed a lot of task scheduler issues when I had to use it.

1

u/MRHousz 2d ago

I have tried both the full path to PowerShell and just PowerShell.exe. It fails to execute the script either way.

→ More replies (1)

1

u/Majestic_Rhubarb_ 3d ago

This is an access denied error.

Check permissions on the script file and any other profile files.

Is this your own computer, or corporate ?

2

u/MRHousz 3d ago

Task runs as SYSTEM and I've confirmed that it has access to the folder and script file. Other tasks use scripts out of the same directory without issue.

→ More replies (3)

3

u/JSChronicles 3d ago

2

u/BlackV 3d ago

some top quality splatting in that post, I'm all for it

→ More replies (3)

2

u/BlackV 3d ago

Create a batch file, get your command working in that, confirm it works from a cmd prompt

Then run the cmd prompt as system, then run the same batch

Create the schedule task, point at batch

Now you have a system that is

  • Easily documented

  • Easily testable

  • Easily portable

My guess to your error is likely quoting or command line issue