Play with the Windows Task Scheduler
Play with the Windows Task Scheduler and XML

You will find in this post two scripts to :

  • create scheduled tasks on remote computers
  • get scheduled tasks on remote computers

These actions will be performed using xml and the COM object Schedule.Service. I will write another article on how to manage scheduled tasks with the builtin Powershell cmdlets get-scheduledTask and set-scheduledtask available since Windows 2012 OS.

Create a scheduled task using a xml file on the remote computers server01 and server02:

$servers = "server01","server02"

$task_path = "c:\Temp\mytask.xml"
$task_user = "username"
$task_pass = "password"

$servers | % {
	$sch = New-Object -ComObject("Schedule.Service")
	$sch.connect($_)
	$folder = $sch.GetFolder("\")
	
	Get-Item $task_path | % {
		$task_name = $_.Name.Replace('.xml', '')
		$task_xml = Get-Content $_.FullName
		$task = $sch.NewTask($null)
		$task.XmlText = $task_xml
		$folder.RegisterTaskDefinition($task_name, $task, 6, $task_user, $task_pass, 1, $null)
	}
}

List the user-defined (Principal ID = Author) scheduled tasks and their properties on the remote servers “server01” and “server02” :

$servers = "server01","server02"

$servers | % {
	$sch = New-Object -ComObject("Schedule.Service")
	$sch.connect($_)
	$folder = $sch.GetFolder("\")
	
	$array=@()
	$folder.gettasks(0) | % {
		$xml = [xml]$_.xml
		
		if ($xml.Task.Principals.Principal.id -eq "Author") {
			$array += New-Object psobject -Property @{
				"Name" = $_.Name
				"Status" = switch($_.State) {0 {"Unknown"} 1 {"Disabled"} 2 {"Queued"} 3 {"Ready"} 4 {"Running"}}
				"Command" = $xml.Task.Actions.Exec.Command
				"Argument" = $xml.Task.Actions.Exec.Arguments
				"NextRunTime" = $_.NextRunTime
				"LastRunTime" = $_.LastRunTime
				"LastRunResult" = $_.LastTaskResult
				"Author" = $xml.Task.Principals.Principal.UserId
				"Created" = $xml.Task.RegistrationInfo.Date
			}
		}
	}
	$array | fl Name,Status,Command,Argument,Actions,NextRuNTime,LastRunTime,LastRunResult,Author,Created
}

<>

My Powershell script categories

Play with the Windows Task Scheduler and XML

Leave a Reply

Your email address will not be published. Required fields are marked *