task scheduler powershell scripts never ends

10,001

Solution 1

I had this problem when trying to execute .ps1 file directly. Execute Powershell and feed it your script as a parameter.

Scheduled Task Actions Tab:

Program\script: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Add Arguments (optional):
-command & 'E:\PowerShell_scripts\Script_name.ps1’

Solution 2

This is going to sound silly, but I initially had the same problem as detailed in the other answers - trying to run the .ps1 script directly instead of via powershell.exe. I worked that part out since I saw Notepad opening, but after correcting my mistake it was still reporting Running.

The solution? Refresh

Solution 3

For the "Start a program" action, list powershell as the "Program/script" and put the path to the script you want to run in the "Add arguments (optional)" box.

The action never finishes if you try to "run" a PowerShell script by listing it as the "Program/script" directly, because Notepad is the default application associated with the .ps1 extension (to help users avoid accidentally running a PowerShell script), and so it opens the script in Notepad in the background instead of executing it. Notepad then never closes itself.

Share:
10,001
Doug
Author by

Doug

Updated on June 04, 2022

Comments

  • Doug
    Doug almost 2 years

    I have a script that works great manually. However, when I schedule it in Task Scheduler, the script never ends and so the next time it tries to run, it fails because the prior instance is still running. The script itself takes a few seconds to complete the first time or when run manually. Here is the script:

    $source = "\\server1\upload"
    $destination = "\\server2\upload"
    $logfile = "c:\Scripts\fileMover\log.txt"
    $table = Get-ChildItem $source -include *
    foreach ($file in $table){
        $filename = $file.FullName
        #write-host $filename
        try
        {
            move-item -LiteralPath $filename -destination $destination -force
            $body = "Successfully moved $filename to $destination"
            $subject = "fileMover Succeeded"
        }
        catch
        {
            $body = "Failed to move $filename to $destination"
            $subject = "fileMover Failed"
        }
        finally
        {
            $body | out-file $logfile -append -width 1000 -encoding ascii
            Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject $subject -SmtpServer "10.1.10.1" -Body $body
            exit
        }
    }
    exit
    

    The script is scheduled with the following settings:

    • Run whether user is logged or not (user account has been granted log in as a batch program privilege)
    • Run with highest privileges
    • Triggers Daily, every 2 minute
    • Action: Start a Program powershell -file c:\Scripts\upload.ps1

    As a workaround, I configured the task to automatically stop after 1 minute. However, I'm concerned that in certain circumstances -- such as a large number of large files -- the script may get terminated before completing fully.

    The script needs to run every 2 minutes.

  • Glenn Watson
    Glenn Watson about 5 years
    Hi, welcome to Stack Overflow. There seems to be some formatting issues with your powershell script there. You may want to use the following guide on how to format code stackoverflow.com/editing-help
  • THE JOATMON
    THE JOATMON over 2 years
    I can't even... This was the solution.
  • Danny Beckett
    Danny Beckett over 2 years
    @THEJOATMON Sometimes the simplest solutions are the easiest ones to overlook 😅
  • ShigaSuresh
    ShigaSuresh almost 2 years
    Is it just me or is it ... command 'E:\PowerShell_scripts\Script_name.ps1’ (note no &)