# Desc: Lists all scheduled tasks and important properties
# Auth: Brian Dill 2021-07-03
# borrowed from: https://stackoverflow.com/questions/32731366/how-to-get-trigger-details-associated-with-a-task-in-task-scheduler-from-powersh
Clear-Host
#------------------------------------------------------------------------------------------
# Config vars
#------------------------------------------------------------------------------------------
$TaskNameLike = "*" # "*" to get all tasks. "Foo*" to get tasks that start with "Foo"
$TaskFolder = "\" # "\" = tasks in root folder. "\TOWER\" = all tasks in TOWER folder
$SaveToCsv = 1 # 1 to save, 0 to n\ot save
$CsvSaveFolder = "C:\Tasks\" # Where you want to save the CSV output
#------------------------------------------------------------------------------------------
Function BinaryWeekdaysToString {
param([int]$DaysOfWeek)
[string]$output = ""
If ($DaysOfWeek -eq -1) {
$output = "No Trigger"
Return $output;
}
$WeekdaysBits7 = ([convert]::ToString([int32]$DaysOfWeek,2)).PadLeft(7, "0")
If ($WeekdaysBits7.Substring(0,1) -eq "1") { $output += 'Su,' }
If ($WeekdaysBits7.Substring(1,1) -eq "1") { $output += 'M,' }
If ($WeekdaysBits7.Substring(2,1) -eq "1") { $output += 'Tu,' }
If ($WeekdaysBits7.Substring(3,1) -eq "1") { $output += 'W,' }
If ($WeekdaysBits7.Substring(4,1) -eq "1") { $output += 'Th,' }
If ($WeekdaysBits7.Substring(5,1) -eq "1") { $output += 'F,' }
If ($WeekdaysBits7.Substring(6,1) -eq "1") { $output += 'Sa,' }
Return $output.TrimEnd(",")
}
#------------------------------------------------------------------------------------------
$Result = @()
Get-ScheduledTask -TaskPath $TaskFolder |
Where-Object { $_.TaskName-like $TaskNameLike } | ForEach-Object {
$Task = $_
Write-Host $Task.TaskName
Try {
[string]$Name = $Task.TaskName
[string]$Author = $Task.Author
[string]$Description = $Task.Description
[bool]$Enabled = $Task.Settings.Enabled
[string]$Action = $Task.Actions | Select -ExpandProperty Execute
[string]$Arguments = $Task.Actions | Select -ExpandProperty Arguments
# Init vars in case no trigger
[datetime]$Start = (Get-Date -Month 1 -Day 1 -Year 1900 -Hour 0 -Minute 0 -Second 0) # bogus 1900-01-01 date
[string]$StartTime = ""
[string]$Repetition = "No Trigger"
[string]$Duration = "No Trigger"
[string]$TriggerDays = "No Trigger"
[int]$DaysOfWeek = -1 # -1 to indicate no trigger
Try {
# If the task has a triger, overwrite the trigger vars with valid values
$Start = $Task.Triggers | Select -ExpandProperty StartBoundary
$StartTime = $Start.ToString("hh:mm")
$DaysOfWeek = $Task.Triggers | Select -Expandproperty DaysOfWeek #$Task.Triggers[0].DaysOfWeek
$Repetition = $Task.Triggers.Repetition | Select -ExpandProperty Interval
$Duration = $Task.triggers.Repetition | Select -ExpandProperty Duration
$TriggerDays = $Task.Triggers | Select -ExpandProperty DaysInterval #$Task.Triggers[0].DaysInterval
} Catch {
Write-Host "--- INFO: No Trigger found for $Name"
}
$splat = @{
'Name' = $Name
'Author' = $Author
'Description' = $Description
'Action' = $Action
'Arguments' = $Arguments
'Start' = $Start
'StartTime' = $StartTime
'Duration' = $Duration
'Repetition' = $Repetition
'DaysOfWeek' = BinaryWeekdaysToString $DaysOfWeek
'TriggerDays' = If ($TriggerDays -eq 1) { "Daily" } else { $TriggerDays }
'Enabled' = If ($Enabled) { "Enabled" } Else { "-" }
}
$obj = New-Object -TypeName PSObject -property $splat
$Result += $obj
}
Catch {
Write-Host "ERROR: $Error"
}
}
$Result = $Result | Select-Object Name, Enabled, DaysOfWeek, TriggerDays, StartTime, Repetition, Duration, Action, Arguments, Description, Author, Start # select in a specific order
$Result | Out-GridView
If ($SaveToCsv) {
$DateIso = Get-Date -Format "yyyy-MM-dd_hhmmss"
$SaveFullPath = [System.IO.Path]::Combine($CsvSaveFolder, "SchedTasks_$DateIso.csv")
$Result | Export-Csv $SaveFullPath -NoTypeInformation
}
Comments