Tuesday, January 25, 2011

Query schtasks using Powershell

On a Windows7 machine I am trying I can run a query to view all the scheduled tasks using schtasks.exe

This is fine but I would also like to filter the result set using something like

schtasks /query | where { $_.TaskName -eq "myTask" } 

The problem is I don't this schtasks returns a properly formatted list for the where function to work.

I've also tried:

schtasks /query /FO LIST
schtasks /query | format-list | where ....

those don't work either.

What would be the best way to query the schtasks on a local computer using Win7 and be able to filter them

  • Here's a blog post I wrote about doing this. Essentially, I took the output of the /FO LIST /V, wrote that to a file, and imported it back in as objects using import-csv

    Link

    Joey : You're on the right track but writing to a temporary file is unnecessary here: `schtasks /query /fo csv /v|convertfrom-csv` works just fine
    jdiaz : this is neat but still not easily queryable
    Mike Shepard : Johannes: you're right, but I really (really) dislike properties that have embedded spaces/colons/slashes. jdiaz: What's not queryable? The script I posted and Johannes' revision both return native powershell objects with properties. They should be just as queryable as any other powershell entities.
  • if you don't need to do it in powershell then the following will work

    schtasks /query | findstr /i "mytask"

    ps version
    schtasks /query | ?{$_ -like 'mytask'}

    From tony roth
  • You could try to use schtasks, which will leave you parsing text. This is almost always error prone, and definitely more difficult than it is to take the output of a command.

    There happens to be a TaskScheduler module in the PowerShellPack. Once you install the PowerShell pack, to get all of the scheduled tasks, use:

    Import-Module TaskScheduler
    Get-ScheduledTask -Recurse
    

    Since these are real objects, to find a task of a particular name, you can use:

    Get-ScheduledTask -Recurse |  Where-Object { $_.Name -like "*Task*"}
    

    In general, you will find that the PowerShell community has taken a lot of harder to use command lines, like schtasks, and turned them into easy-to-use cmdlets, like Get-ScheduledTask.

    See Also:

    Sending Automated Emails using the TaskScheduler Module

    Hope this helps

    Mike Shepard : This works great if you're using Win2k8 boxes (or vista/W7). Unfortunately, it doesn't work with W2k3 servers (which are still very common in my environment).
  • You are overthinking it.

    Commandline for what you want schtasks /query /s %computername%|FIND /I "%name_of_task%"

    example schtasks /query /s server01|FIND /I "schedule"

0 comments:

Post a Comment