Skip to content

Instantly share code, notes, and snippets.

@rezarahimian
Last active June 27, 2021 02:09
Show Gist options
  • Save rezarahimian/552f1a89511ec9772e8517b6f5f393b6 to your computer and use it in GitHub Desktop.
Save rezarahimian/552f1a89511ec9772e8517b6f5f393b6 to your computer and use it in GitHub Desktop.
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)][String] $ComputerName = $env:COMPUTERNAME,
[Parameter(Mandatory=$false)][ValidateSet('Start','Stop','Enable','Delete','Create')][String] $Action
)
try
{
$TaskName = 'Maintenace'
$TaskPath = '\'
$User = 'NT AUTHORITY\SYSTEM'
$CimSessionOption = New-CimSessionOption -Protocol 'Dcom'
$CimSession = New-CimSession -ComputerName $ComputerName -SessionOption $CimSessionOption -Credential $Credential -ErrorAction SilentlyContinue
if ($null -ne $CimSession)
{
$Task = Get-ScheduledTask -CimSession $CimSession | Where-Object { $_.TaskName -eq $TaskName}
if (-not $Task -and $Action -ne 'Create') { Throw ('{0} does not exist on {1}!' -f $TaskName, $ComputerName) }
switch ($Action)
{
'Start'
{
Start-ScheduledTask -CimSession $CimSession -TaskPath $TaskPath -TaskName $TaskName -ErrorAction Stop
break
}
'Stop'
{
Stop-ScheduledTask -CimSession $CimSession -TaskPath $TaskPath -TaskName $TaskName -ErrorAction Stop
break
}
'Enable'
{
Enable-ScheduledTask -CimSession $CimSession -TaskPath $TaskPath -TaskName $TaskName -ErrorAction Stop
break
}
'Delete'
{
Unregister-ScheduledTask -CimSession $CimSession -TaskPath $TaskPath -TaskName $TaskName -ErrorAction Stop
break
}
'Create'
{
$AdvSettings = New-ScheduledTaskTrigger -At '1:00am' -Once -RepetitionDuration '14:00' -RepetitionInterval '01:00'
$AdvSettings.Repetition.StopAtDurationEnd = $false
$TaskTrigger1 = New-ScheduledTaskTrigger -At '1:00am' -Weekly -WeeksInterval 1 -DaysOfWeek Saturday,Sunday
$TaskTrigger1.Repetition = $AdvSettings.Repetition
$TaskTrigger2 = New-ScheduledTaskTrigger -AtStartup
$TaskTrigger2.Delay = 'PT1M'
$TaskTrigger = @($TaskTrigger1, $TaskTrigger2)
$TaskTrigger | Where-Object { $_.StartBoundary } | ForEach-Object { $_.StartBoundary = [DateTime]::Parse($_.StartBoundary).ToLocalTime().ToString('s') }
$Command = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
$Script = 'Perform-Maintenace.ps1 -Verbose *> C:\Temp\Perform-Maintenace.log'
$Argument = ('-NoProfile -Command "& {{ {0} }}"' -f $Script)
$TaskAction = New-ScheduledTaskAction -Execute $Command -Argument $Argument
$TaskSetting = New-ScheduledTaskSettingsSet -Compatibility Win8
$Description = 'Maintenace scheduled task'
Register-ScheduledTask -CimSession $CimSession -TaskPath $TaskPath -TaskName $TaskName -User $User -Action $TaskAction -Settings $TaskSetting -RunLevel Highest -Description $Description -Trigger $TaskTrigger -Force -ErrorAction Stop
break
}
}
}
}
catch
{
Write-Verbose -Message $_.Exception.Message
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment