bdill icon

GetScheduledTasks.ps1

bdill | PRO | 07/04/21 07:19:30 AM UTC (Edited) | 0 ⭐ | 1838 👁️ | Never ⏰ | []
PowerShell |

4.58 KB

|

None

|

0 👍

/

0 👎

# 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