pf-WinTaskScheduler.ps1
function Get-ScheduledTaskService { $service = New-Object -com 'schedule.service' $service.Connect() return $service } function New-TaskScheduler_Folder ($path) { $service = Get-ScheduledTaskService $rootFolder = $service.GetFolder("\") $currentFolder = $rootFolder $pathParts = $path -split '\\' foreach ($part in $pathParts) { $folders = $currentFolder.GetFolders(0) $nextFolder = $folders | Where-Object Name -EQ $part if ($nextFolder ) { $currentFolder = $nextFolder continue } $currentFolder = $currentFolder.CreateFolder($part) } return $currentFolder } function New-TaskScheduler_Folder:::Example { New-TaskScheduler_Folder AA\BB\CC } function Get-TaskScheduler($currentFolder, $parentPath) { if (-not $service) { $service = Get-ScheduledTaskService } if (-not $currentFolder) { $currentFolder = $service.GetFolder("\") } $tasks = $currentFolder.GetTasks(0) if ($tasks.Count -gt 0) { $tasks | ForEach-Object { $_ } } $folders = $currentFolder.GetFolders(0) foreach($folder in $folders) { Get-TaskScheduler -currentFolder $folder -parentPath $currentFolder.Path } } function Get-TaskScheduler:::Example { $tasksEnabled = Get-TaskScheduler | Where-Object Path -Like '*CORP*' | Where-Object { $_.Enabled } Write-Verbose $tasksEnabled } function Disable-TaskScheduler { Param ( [Parameter(ValueFromPipeline=$true)] $task, [ScriptBlock]$whileAction, [Switch]$stop ) begin { $taskList = @() } process { $taskList += $task } end { $taskListEnabled = $taskList | Where-Object { $_.Enabled } try { $taskListEnabled | ForEach-Object { $_.Enabled = $false } if ($stop) { $taskList | ForEach-Object { $_.Stop(0) } } if ($whileAction) { . $whileAction } } finally { if ($whileAction) { $taskListEnabled | ForEach-Object { $_.Enabled = $true } } } } } function Disable-TaskScheduler_Scope:::Example { $tasksEnabled | Disable-TaskScheduler -whileAction { Start-Sleep -Seconds 5 } -stop } |