Renamed File
This commit is contained in:
144
Powershell/Register-UniversalTask-TUI.ps1
Normal file
144
Powershell/Register-UniversalTask-TUI.ps1
Normal file
@@ -0,0 +1,144 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Create or list Scheduled Tasks on local or remote servers under SYSTEM account.
|
||||
|
||||
.DESCRIPTION
|
||||
Streamlines task creation and management across multiple servers:
|
||||
- Always runs as SYSTEM
|
||||
- Supports Once/Daily/Weekly/Monthly triggers
|
||||
- Custom action command + arguments
|
||||
- Custom settings (start when available, wake to run, restart on failure)
|
||||
- Optionally list existing tasks
|
||||
- Can target a remote server via CIM session
|
||||
|
||||
.PARAMETER ServerName
|
||||
(Optional) Remote server to connect to. If omitted, actions run locally.
|
||||
|
||||
.PARAMETER ListTasks
|
||||
Switch. If specified, lists current scheduled tasks and exits.
|
||||
|
||||
.PARAMETER TaskName
|
||||
Name of the scheduled task (required unless -ListTasks).
|
||||
|
||||
.PARAMETER Description
|
||||
Task description (appears in Task Scheduler UI).
|
||||
|
||||
.PARAMETER Frequency
|
||||
Trigger frequency: Once, Daily, Weekly, Monthly.
|
||||
|
||||
.PARAMETER At
|
||||
DateTime for the trigger (for Once) or time of day (for recurring triggers).
|
||||
|
||||
.PARAMETER DaysOfWeek
|
||||
When Frequency = Weekly, specify days (e.g. Monday,Wednesday).
|
||||
|
||||
.PARAMETER Months
|
||||
When Frequency = Monthly, specify months (e.g. January,June).
|
||||
|
||||
.PARAMETER DaysOfMonth
|
||||
When Frequency = Monthly, specify days of month (e.g. 1,15,28).
|
||||
|
||||
.PARAMETER Command
|
||||
Executable to run (default: powershell.exe).
|
||||
|
||||
.PARAMETER Arguments
|
||||
Command arguments (e.g. '-File C:\Scripts\MyScript.ps1').
|
||||
|
||||
.PARAMETER StartWhenAvailable
|
||||
If set, task will start if missed.
|
||||
|
||||
.PARAMETER WakeToRun
|
||||
If set, will wake the machine to run.
|
||||
|
||||
.PARAMETER RestartIntervalMinutes
|
||||
On failure, how often (minutes) to retry. Zero = no retry.
|
||||
|
||||
.PARAMETER RestartCount
|
||||
How many retry attempts on failure.
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[string]$ServerName,
|
||||
[switch]$ListTasks,
|
||||
[Parameter(Mandatory = $false, Position = 0)][string]$TaskName,
|
||||
[string]$Description,
|
||||
[ValidateSet('Once','Daily','Weekly','Monthly')][string]$Frequency,
|
||||
[datetime]$At,
|
||||
[string[]]$DaysOfWeek,
|
||||
[string[]]$Months,
|
||||
[int[]]$DaysOfMonth,
|
||||
[string]$Command = 'powershell.exe',
|
||||
[string]$Arguments = '',
|
||||
[switch]$StartWhenAvailable,
|
||||
[switch]$WakeToRun,
|
||||
[int]$RestartIntervalMinutes = 0,
|
||||
[int]$RestartCount = 0
|
||||
)
|
||||
|
||||
# Create CIM session if remote
|
||||
if ($ServerName) {
|
||||
Write-Host "Creating CIM session to $ServerName..."
|
||||
$CimSession = New-CimSession -ComputerName $ServerName
|
||||
}
|
||||
|
||||
# List tasks and exit
|
||||
if ($ListTasks) {
|
||||
Write-Host "Listing Scheduled Tasks on" ($ServerName ? $ServerName : 'local')
|
||||
Get-ScheduledTask -CimSession $CimSession |
|
||||
Select-Object TaskName, State, Actions |
|
||||
Format-Table -AutoSize
|
||||
return
|
||||
}
|
||||
|
||||
# Validate required parameters for task creation
|
||||
if (-not $TaskName -or -not $Description -or -not $Frequency -or -not $At) {
|
||||
Throw 'Parameters -TaskName, -Description, -Frequency, and -At are required when creating a task.'
|
||||
}
|
||||
|
||||
# Build trigger
|
||||
switch ($Frequency) {
|
||||
'Once' {
|
||||
$trigger = New-ScheduledTaskTrigger -Once -At $At
|
||||
}
|
||||
'Daily' {
|
||||
$trigger = New-ScheduledTaskTrigger -Daily -At $At.TimeOfDay
|
||||
}
|
||||
'Weekly' {
|
||||
if (-not $DaysOfWeek) { Throw 'Specify -DaysOfWeek for Weekly triggers.' }
|
||||
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek $DaysOfWeek -At $At.TimeOfDay
|
||||
}
|
||||
'Monthly' {
|
||||
if (-not $Months -or -not $DaysOfMonth) { Throw 'Specify -Months and -DaysOfMonth for Monthly triggers.' }
|
||||
$trigger = New-ScheduledTaskTrigger -Monthly -MonthsOfYear $Months -DaysOfMonth $DaysOfMonth -At $At.TimeOfDay
|
||||
}
|
||||
}
|
||||
|
||||
# Build action
|
||||
$action = New-ScheduledTaskAction -Execute $Command -Argument $Arguments
|
||||
|
||||
# Build settings
|
||||
$settings = New-ScheduledTaskSettingsSet `
|
||||
-AllowStartIfOnBatteries:$false `
|
||||
-DontStopOnIdleEnd `
|
||||
-StartWhenAvailable:$StartWhenAvailable.IsPresent `
|
||||
-WakeToRun:$WakeToRun.IsPresent
|
||||
|
||||
if ($RestartIntervalMinutes -gt 0) {
|
||||
$interval = New-TimeSpan -Minutes $RestartIntervalMinutes
|
||||
$settings = $settings | Set-ScheduledTaskSettings -RestartOnFailureInterval $interval -RestartCount $RestartCount
|
||||
}
|
||||
|
||||
# Register task as SYSTEM
|
||||
Write-Host "Registering task '$TaskName' on" ($ServerName ? $ServerName : 'local')
|
||||
Register-ScheduledTask `
|
||||
-TaskName $TaskName `
|
||||
-Action $action `
|
||||
-Trigger $trigger `
|
||||
-Settings $settings `
|
||||
-Description $Description `
|
||||
-User 'NT AUTHORITY\SYSTEM' `
|
||||
-RunLevel Highest `
|
||||
-CimSession $CimSession `
|
||||
-Force
|
||||
|
||||
Write-Host "Task '$TaskName' created successfully."
|
||||
Reference in New Issue
Block a user