Register-ScheduledReboot.ps1
function Register-ScheduledReboot { <# .SYNOPSIS Creates a scheduled task to restart a computera t a specified time. .DESCRIPTION Accesses a remote computer to schedule a reboot at the specified time. .EXAMPLE Register-ScheduledReboot -computer server1 -hour 23 -minute 30 Creates a scheduled task to invoke the command shutdown.exe /d P:2:18 /r /t 30 /f at 11:30PM. #> [CmdletBinding()] param ( [Parameter(Mandatory=$false, Position=0)] [System.String] $computer = 'localhost', [Parameter(Mandatory=$false, Position=1)] [int] $hour = 17, [Parameter(Mandatory=$false, Position=2)] [Int] $minute = 00 ) function Register-RebootTask ($hour,$minute,$domain,$user) { Get-ScheduledTask -TaskName "Server Reboot - Scheduled" | Unregister-ScheduledTask -Confirm:$false -ErrorAction SilentlyContinue $taskAction = New-ScheduledTaskAction -Execute "shutdown.exe" ` -Argument "/d P:2:18 /r /t 30 /f" $taskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date -hour $hour -Minute $minute -Second 00) #$Principal = New-ScheduledTaskPrincipal -UserID "$domain\$user" -LogonType ServiceAccount -RunLevel Highest $Principal = New-ScheduledTaskPrincipal -GroupId "BUILTIN\Administrators" -RunLevel Highest Register-ScheduledTask -Action $taskAction -Trigger $taskTrigger -TaskName "Server Reboot - Scheduled" -Description "Scheduled System Reboot by $domain\$user. Created at $(Get-Date)." -Principal $Principal Get-ScheduledTask -TaskName "Server Reboot - Windows Update" } Invoke-Command -ComputerName $computer -ScriptBlock ${function:Register-RebootTask} -ArgumentList $hour,$minute,$env:USERDOMAIN,$env:USERNAME } |