Private/Register-cChocoExJob.ps1
function Register-cChocoExJob { [CmdletBinding()] param () begin { #Gather Variables $Name = 'cChocoExJob01' $ScheduledJobOption = New-ScheduledJobOption -RunElevated -ContinueIfGoingOnBattery -StartIfOnBattery -MultipleInstancePolicy 'StopExisting ' $JobTrigger01 = New-JobTrigger -AtLogOn $JobTrigger02 = New-JobTrigger -AtStartup $ScriptBlock = { $Path = "HKLM:\Software\cChocoEx\" do { $ItemProperty = Get-ItemProperty -Path $Path -Name 'OverRideMaintenanceWindow' -ErrorAction SilentlyContinue Start-Sleep -Seconds 5 } until ($ItemProperty.OverRideMaintenanceWindow -eq 1) Start-cChocoEx -OverrideMaintenanceWindow -EnableNotifications } #ScheduledJobSplat $ScheduledJobParams = @{ ScriptBlock = $ScriptBlock Name = $Name ScheduledJobOption = $ScheduledJobOption Trigger = @($JobTrigger01, $JobTrigger02) } } process { #Check For Existig Job $CurrentJob = Get-ScheduledJob -Name $Name -ErrorAction SilentlyContinue #Unregister Existing Job If Found if ($CurrentJob) { Write-Log -Severity 'Information' -Message "Existing Scheduled Job $Name Found" Write-Log -Severity 'Information' -Message "Unregistering Scheduled Job $Name" try { $CurrentJob | Unregister-ScheduledJob -Force Write-Log -Severity 'Information' -Message "Unregistering Scheduled Job $Name - Success" } catch { Write-Log -Severity 'Error' -Message "Unregistering Scheduled Job $Name - Failure" Write-Log -Severity 'Error' -Message "$($_.Exception.Message)" } } #Register Job Write-Log -Severity 'Information' -Message "Registering Scheduled Job $Name" try { $UserID = "NT AUTHORITY\SYSTEM" $TaskPath = "\Microsoft\Windows\PowerShell\ScheduledJobs" $null = Register-ScheduledJob @ScheduledJobParams $ScheduledTaskPrincipal = New-ScheduledTaskPrincipal -UserID $UserID -LogonType ServiceAccount -RunLevel Highest $null = Set-ScheduledTask -TaskPath $TaskPath -TaskName $Name -Principal $ScheduledTaskPrincipal Write-Log -Severity 'Information' -Message "Registering Scheduled Job $Name - Success" } catch { Write-Log -Severity 'Error' -Message "Registering Scheduled Job $Name - Failure" Write-Log -Severity 'Error' -Message "$($_.Exception.Message)" } } end { #Validate Job Exists try { $null = Get-ScheduledJob -Name $Name } catch { Write-Log -Severity 'Error' -Message "Required Scheduled Job $Name Not Found" Write-Log -Severity 'Error' -Message "$($_.Exception.Message)" } } } |