function ExecuteWindowsTaskScheduler {
param(
[Parameter(Mandatory = $true)]
[String]$TaskName, #e.g. "Open Notepad task"
[Parameter(Mandatory = $true)]
[String]$TimeToExecute, #e.g. "3:45pm/am"
[Parameter(Mandatory = $true)]
[ValidateSet('Once','Daily','Weekly, Monthly')]
[string]$FrequencyToExecute,
[Parameter(Mandatory = $true)]
[String]$DomainAndUser, #e.g. "yourdomain\yourusername"
[Parameter(Mandatory = $true)]
[String]$ProgramWithPath, #e.g. "C:\PowerShell\yourFile.ps1"
[Parameter(Mandatory = $false)]
[bool]${DebugMode}
)
$TriggerParams = @{
At = $TimeToExecute
}
# Add the appropriate frequency value to the splatting table
if ($FrequencyToExecute -eq 'Monthly') {
$TriggerParams.Add('Weekly',$true)
}
else {
$TriggerParams.Add($FrequencyToExecute,$true)
}
# Specify the trigger settings
if ($FrequencyToExecute -eq "Weekly") {
$Trigger = New-ScheduledTaskTrigger @TriggerParams -WeeksInterval 1 -DaysOfWeek Monday
}
elseIf ($FrequencyToExecute -eq "Monthly") {
$Trigger = New-ScheduledTaskTrigger @TriggerParams -WeeksInterval 4 -DaysOfWeek Monday
}
else {
$Trigger = New-ScheduledTaskTrigger @TriggerParams
}
# Specify what script to run and with its parameters
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument $ProgramWithPath
$TaskExists = Get-ScheduledTask | Where-Object {$_.TaskName -like $TaskName }
if($TaskExists) {
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}
I'm definitely not happy with this part of the code:
# Add the appropriate frequency value to the splatting table
if ($FrequencyToExecute -eq 'Monthly') {
$TriggerParams.Add('Weekly',$true)
}
else {
$TriggerParams.Add($FrequencyToExecute,$true)
}
# Specify the trigger settings
if ($FrequencyToExecute -eq "Weekly") {
$Trigger = New-ScheduledTaskTrigger @TriggerParams -WeeksInterval 1 -DaysOfWeek Monday
}
elseIf ($FrequencyToExecute -eq "Monthly") {
$Trigger = New-ScheduledTaskTrigger @TriggerParams -WeeksInterval 4 -DaysOfWeek Monday
}
else {
$Trigger = New-ScheduledTaskTrigger @TriggerParams
}
Is there a way to improve this part? I mean, I had to create a small hack because there is no Monthly parameter for New-ScheduledTaskTrigger
.
[bool]$DebugMode
to[switch]$DebugMode
\$\endgroup\$[bool]
to me looks like it expects input, like-DebugMode $true
or-DebugMode $false
, while a switch is$false
when omitted, and$true
is there. I admit, I haven't tested it, it just makes more sense to me in context of syntax and purpose. It feels more intuitive. \$\endgroup\$