Created ScheduledTask via PS, but it doesn't do anything

I need to insert a Scheduled Task onto a remote computer which reboots it once at a specific time. Seems pretty straight-forward.
The commands I’m using appear to work, but the task does not show up in the Task Scheduler on the target machine, and it does not reboot at the designated time - or ever for that matter.

Here’s my code

$hostName = “TestComputer”

$taskTrigger = New-ScheduledTaskTrigger -once -At 7:32
$taskAction = New-ScheduledTaskAction -Execute “%SYSTEMROOT%\System32\shutdown.exe” -argument “-r -f -t 10”
Register-ScheduledTask -taskname “Reboot Task IVb” -Action $taskAction -Trigger $taskTrigger -CimSession $hostName
Enable-ScheduledTask -CimSession $hostName -TaskName “Reboot Task IVb”

when I run this from my utility server, I get this

I ran it at 7:25 and waited ten minutes for TestComputer to reboot.

Reboot Task IVb never appears in the Task Scheduler on TestComputer.

I can run

get-scheduledtask -taskname “reboot task IVb” -cimsession TestComputer

from my Util server and receive a reply just like the screenshot above.

Hope someone can tell me what I’m getting wrong.

—K

I had to check some of my examples and it doesn’t appear i’ve ever used the -CimSession parameter when doing this, but maybe I should try.
Instead i’ve been wrapping all my scheduled-task-creation code in curly braces and saving it in a variable as a scriptblock. Then using invoke-command against that remove computer with that scriptblock as a parameter argument for -ScriptBlock.
This successfully creates the scheduled task.

Once you get over that hurtle then you can focus on the frustrating part of trying to diagnose why the Action in the scheduled task didn’t take place.
Does the shutdown command take parameters with dashes instead of slashes?

Usage: C:\windows\system32\shutdown.exe [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]
    [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

    No args    Display help. This is the same as typing /?.
    /?         Display help. This is the same as not typing any options.
    /i         Display the graphical user interface (GUI).
               This must be the first option.
    /l         Log off. This cannot be used with /m or /d options.
    /s         Shutdown the computer.
    /sg        Shutdown the computer. On the next boot, if Automatic Restart Sign-On
               is enabled, automatically sign in and lock last interactive user.
               After sign in, restart any registered applications.
    /r         Full shutdown and restart the computer.
    /g         Full shutdown and restart the computer. After the system is rebooted,
               if Automatic Restart Sign-On is enabled, automatically sign in and
               lock last interactive user.
               After sign in, restart any registered applications.
    /a         Abort a system shutdown.
               This can only be used during the time-out period.
               Combine with /fw to clear any pending boots to firmware.
    /p         Turn off the local computer with no time-out or warning.
               Can be used with /d and /f options.
    /h         Hibernate the local computer.
               Can be used with the /f option.
    /hybrid    Performs a shutdown of the computer and prepares it for fast startup.
               Must be used with /s option.
    /fw        Combine with a shutdown option to cause the next boot to go to the
               firmware user interface.
    /e         Document the reason for an unexpected shutdown of a computer.
    /o         Go to the advanced boot options menu and restart the computer.
               Must be used with /r option.
    /m \\computer Specify the target computer.
    /t xxx     Set the time-out period before shutdown to xxx seconds.
               The valid range is 0-315360000 (10 years), with a default of 30.
               If the timeout period is greater than 0, the /f parameter is
               implied.
    /c "comment" Comment on the reason for the restart or shutdown.
               Maximum of 512 characters allowed.
    /f         Force running applications to close without forewarning users.
               The /f parameter is implied when a value greater than 0 is
               specified for the /t parameter.
    /d [p|u:]xx:yy  Provide the reason for the restart or shutdown.
               p indicates that the restart or shutdown is planned.
               u indicates that the reason is user defined.
               If neither p nor u is specified the restart or shutdown is
               unplanned.
               xx is the major reason number (positive integer less than 256).
               yy is the minor reason number (positive integer less than 65536).

EDIT: also, i’m inclined to use Powershell whenever possible over native commands, so perhaps your Scheduled Task action could look like this instead:

New-ScheduledTaskAction -Execute "Powershell" -Argument '-NoProfile -ExecutionPolicy Bypass -Command "& {Restart-Computer -Delay 10 -Force  }"'

thanks Grey, that’s great info. I thought the switches were dashed, not slashed. I’ll try the change and see what happens

update later.

—K

Tried creating the task again with slashed switches. no change.

Task still does not appear in the Task Scheduler.

I will try your powershell command to reboot next

—K

oh i’m confused. I thought you said you can run Get-ScheduledTask remotely against the TestComputer and your scheduled task comes back.

Maybe try not doing it through CIM session and passing all your PS through Invoke-Command like i described.

Yes, it comes back using

get-scheduledtask -taskname “Reboot Task IVb” -cimsession “testcomputer”

It just never shows up in Task Scheduler, or seems to run.

Not sure how to do the invoke-command. I’ll read up on that and give it a shot.

Here’s some sample code to play with

$ScriptBlock ={
    $action = New-ScheduledTaskAction -Execute "Powershell" -Argument '-NoProfile -ExecutionPolicy Bypass -Command "& {Restart-Computer -Delay 10 -Force  }"'
    $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
    $taskTrigger = New-ScheduledTaskTrigger -once -At 7:32
    $task = New-ScheduledTask -Action $action -Principal $principal
    $taskname = "RebootComputer"
    $registeredTask = Register-ScheduledTask $taskname -InputObject $task
    }

Invoke-Command -ComputerName TestComputer -ScriptBlock $ScriptBlock

thanks, grey! I’ll give this a shot. BTW, I discovered that the tasks are listed on the target computer, I just had to run Task Scheduler as Administrator to see them.

That said, they still did not execute.

Update later.

I ran your script as you presented it and found that it mostly works. However, the trigger is not written into the task.

I tried a number of variations and never see the trigger appear, and the task never reboots the computer.

that’s my bad. Was copy/pasting code from different places and didn’t update this line.

 $task = New-ScheduledTask -Action $action -Principal $principal -Trigger $taskTrigger

try making that line look like that where it includes the Trigger parameter

Ah, yes. I might have caught that…eventually. Thanks for the correction. I’m trying that now.

In the meantime, I did manage to combine some of your stuff with what I tried before and made a reboot happen on schedule with this:

$hostName = “TestComputer”
$taskTrigger = New-ScheduledTaskTrigger -once -At 8:11am
$taskAction = New-ScheduledTaskAction -Execute “%SYSTEMROOT%\System32\shutdown.exe” -argument “/r /f /t 10”
$principal = New-ScheduledTaskPrincipal -UserID “NT AUTHORITY\SYSTEM” -LogonType ServiceAccount -RunLevel Highest

Register-ScheduledTask -taskname “Reboot Task IVb” -Action $taskAction -Trigger $taskTrigger -CimSession $hostName -principal $principal

I saw that the task was set to require the user - my admin account - to be logged in. Adding the $Principal stuff you provided made it work.

I’ll put this together with the time calculation stuff you gave me on another thread, and I think I’ll be good to go. I have a .csv list of machines for renaming to bring them into the proper name standard, and plan to stagger the reboots every five minutes starting at midnight local time.

Thanks,000,000 for your time and help!

—K

1 Like