Use PowerShell to Show Results of Scheduled Tasks


Summary: Microsoft Scripting Guy, Ed Wilson, talks about using Windows PowerShell to see the results of scheduled tasks.

Microsoft Scripting Guy, Ed Wilson, is here. It is snack time. For me, a perfect snack is a piece of biscotti and a cup of tea. Today, I am having such a snack—the tea is a nice green tea with a bit of jasmine flower in it. Lovely.

Something else that is lovely is using the cmdlets from Scheduled Tasks module. This module contains a number of very helpful cmdlets.

Note  For a great overview of the Scheduled Tasks module, see Windows 8.1 and the Land of Forgotten Modules: Part 5.

Working with scheduled tasks

The Task Scheduler is very sophisticated. It is so sophisticated that many applications use it to run things at various times. If I want to get an idea of the tasks that are ready to run, it is going to require a lot of clicking in the GUI. But with Windows PowerShell, it is a piece of cake. I type a command such as the following—and voila! Lots of information appears.

Get-ScheduledTask | where state -EQ 'ready'

The output is shown here:

Image of command output

There are lots of scheduled tasks that are actually ready to run. What I if I want to find out the results of the last time the task ran? I know where to go in the GUI, but what about using Windows PowerShell? I look at cmdlets from the Scheduled Tasks module, and I see some things that make sense. Here are the results:

PS C:\> Get-Command -Module ScheduledTasks -Verb get

CommandType     Name                                         ModuleName

———–                 —-                                               ———-

Function        Get-ClusteredScheduledTask             ScheduledTasks

Function        Get-ScheduledTask                             ScheduledTasks

Function        Get-ScheduledTaskInfo                       ScheduledTasks

I suspect that I can use Get-ScheduledTaskInfo. So I give it a try. I know one of the scheduled tasks is Consistency.

Image of command output

Dude. How rude! I mean, I KNOW the task name is Consistency, I just wrote a blog post about it ( see Run a Scheduled Task to Check DSC). I use the Get-ScheduledTask cmdlet to prove this:

PS C:\> Get-ScheduledTask -TaskName consistency

TaskPath                                                          TaskName               State

——–                                                               ——–                      —–

\Microsoft\Windows\Desired State Configurat… Consistency          Ready

Yep. It is Consistency alright. What if I use the –TaskPath parameter? As shown here, it is now asking for the name. Dude…

Image of command output

I type the task name at the prompt, and finally I get the results of the last run. This is shown here:

Image of command output

If I am going to go to all that trouble, I may as well just pipe Get-ScheduledTask in the first place:

Get-ScheduledTask consistency | Get-ScheduledTaskInfo

Cool. If I can pipe the results from Get-ScheduledTask to Get-ScheduledTaskInfo, I can make myself a report by piping the results to Export-CSV:

Get-ScheduledTask | where state -EQ 'ready' | Get-ScheduledTaskInfo |
Export-Csv -NoTypeInformation -Path C:\fso\scheduledTasksResults.csv

Here is the output in Excel:

Image of command output

Sweet. That was easy.

That is all there is to using Windows PowerShell to find the results of scheduled tasks. Scheduled Tasks week will continue tomorrow when I will talk about more cool stuff.

I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.

Ed Wilson, Microsoft Scripting Guy

Comments (3)

  1. Jason says:

    Any chance you can add some snippets to show how to retrieve the same from a remote host?

  2. luis says:

    Hi,
    I get the next error:

    The term ‘Get-ScheduledTask’ is not recognized as the name of a cmdlet, function, script file, or operable program. Che
    ck the spelling of the name, or if a path was included, verify that the path is correct and try again.
    At line:1 char:18
    + Get-ScheduledTask <<<<
    + CategoryInfo : ObjectNotFound: (Get-ScheduledTask:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

  3. ErikAstrom says:

    Jason, I guess you can use it remote like this:

    $computer = name of the remote computer
    Invoke-Command -ComputerName $computer -ScriptBlock {Get-ScheduledTask | where state -EQ ‘ready’ | Get-ScheduledTaskInfo}

Skip to main content