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, $credential.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
2 comments:
Just to point out your version still has the same typo the original does:
$credentail.GetNetworkCredential().Password
Thanks naviwhack, I missed that one.
I've updated the script.
Post a Comment