To manage the Task Scheduler service with Powershell on Windows 8/2012, you can use the new Scheduledtasks module. On Windows Vista/7/2008/2008 R2 you have to download the PowershellPack (also included in Windows 7 Reskit) and install the taskscheduler module.
But there is one thing missing in the taskscheduler module, when you want to create a new task with the Register-ScheduledTasks : you can’t specified in witch folder you want it. So I’ve created a new cmdlet (Register-ScheduledTasksEx) that allow you to specified to folder to use. To install this new cmdlet (kind of a add-on) with the taskscheduler module, just follow these 2 steps :
Step 1 : Create the file Register-ScheduledTasksEx.ps1
Create a new file named Register-ScheduledTasksEx.ps1 in the directory where the taskscheduler module is installed (generally %USERPROFILE%\Documents\WindowsPowerShell\Modules) and paste the following code in it.
function Register-ScheduledTaskEx { <# .Synopsis Registers a scheduled task. .Description Registers a scheduled task. Modified to support Folders (path) #> param( # The name of the scheduled task to register [Parameter(Mandatory=$true,Position=0)] [string] $name, # The path of the scheduled task to register [Parameter(Mandatory=$false)] [ValidateNotNull()] [string] $path="", # The Scheduled Task to Register [Parameter(ValueFromPipeline=$true, Mandatory=$true)] [__ComObject] $Task, # The name of the computer to connect to. [string[]] $ComputerName, # The credential used to connect [Management.Automation.PSCredential] $Credential ) begin { Set-StrictMode -Off } process { if ($task.Definition) { $Task = $task.Definition } foreach ($c in $computerName) { $scheduler = Connect-ToTaskScheduler -ComputerName $c -Credential $Credential if ($scheduler -and $scheduler.Connected) { $folder = $scheduler.GetFolder($path) if ($Credential) { $folder.RegisterTaskDefinition($Name, $Task, 6, $credential.UserName, $credentail.GetNetworkCredential().Password, 6, $null) } else { $folder.RegisterTaskDefinition($Name, $Task, 6, "", "", 3, $null) } } } } }
Step 2 : Modify TaskScheduler.psm1 file
Add the following line to the TaskScheduler.psm1 file (In the TaskScheduler module directory).
. $psScriptRoot\Register-ScheduledTaskEx.ps1
Example
Here’s how to use the new cmdlet :
import-module TaskScheduler $ScheduledTask = New-Task $ScheduledTask | add-TaskAction -path "Notepad.exe" -Arguments "" -WorkingDirectory ""| out-null # Note : The folder "\MyCustomFolder" must already exist in the TaskScheduler $ScheduledTask | Register-ScheduledTaskEx -Name "MyCustomScheduledTask" -path "\MyCustomFolder" -ComputerName Localhost | out-null
Source : powershelleverydayfaq.blogspot.ca