--- title: "Schedule a Reboot With a PowerShell Script" slug: "schedule-reboot-with-powershell" updated: 2025-12-30T22:38:21Z published: 2025-12-30T22:38:21Z canonical: "docs.workspot.com/schedule-reboot-with-powershell" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.workspot.com/llms.txt > Use this file to discover all available pages before exploring further. # Schedule a Reboot With a PowerShell Script This PowerShell script allows you to schedule a time to reboot a Windows VM reboot to allow, typically for updates or policy implementation. ## Procedure ### 1. Prepare the PowerShell Script - Save the ScheduledReboot.ps1 script (below) and copy to a share location `\\<DomainName>\SYSVOL\<DomainName>\Scripts\ScheduledReboot.ps1`,where the script is accessible to all machines in the domain and has Read & Execute permissions for the Domain Computers (DC). - > **Note**: The sysvol path on DC is` C:\windows\SYSVOL\sysvol\<domain>scripts` #### The Script The Script: ScheduledReboot.ps1 ```powershell # ScheduledReboot.ps1        # Define maximum attempts        $max_Attempts = 5 #Adjust retry attempts as per your need        $attempts = 0        # Function to check if a user is logged in        function IsUserLoggedIn {           # only capture active session, ignoring disconnected sessions              $users = quser | Select-String "Active"            return $users -ne $null        }        # log activity        function Log-Activity {            param (                [string]$Message            )            $logPath = "C:\ScheduleRebootLogs\RebootScript.log"            $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"            "$timestamp - $Message" | Out-File -Append -FilePath $logPath        }        # log directory exists        if (!(Test-Path "C:\ScheduleRebootLogs")) {            New-Item -Path "C:\Logs" -ItemType Directory        }        Log-Activity "Starting scheduled reboot script."        # Attempt to reboot up to “max_Attempts” times        while ($attempts -lt $max_Attempts) {            if (IsUserLoggedIn) {                Log-Activity "User is logged in. Skipping reboot attempt $($attempts + 1)."                Start-Sleep -Seconds 900 # Wait 15 mins before retrying            } else {                Log-Activity "No user is logged in. Rebooting now."                Restart-Computer -Force                break            }            $attempts++        }        if ($attempts -ge $maxAttempts) {            Log-Activity "Max attempts reached. Exiting script."        }        Log-Activity "Reboot script execution completed." ``` ### 2. Create a Scheduled task Policy using the Group Policy Management Console #### Open Group Policy Management - On the domain controller (or a machine with the necessary permissions), open Group Policy Management: - Press Win+R, type gpmc.msc, and press Enter. - Navigate to the Organizational Unit (OU) where your target machines are located. - Example: “Domain > Example.com > Organizational Units > Target VMs.“ - Right-click the OU and create a new GPO. Name the policy (e.g., "RestartVMNoUserPolicy") and then edit it. #### Navigate to the Scheduled Tasks Configuration - In the Group Policy Management Editor, Go to “Computer Configuration > Preferences > Control Panel Settings > Scheduled Tasks.” - Right-click on Scheduled Tasks in the right pane and select “New > Scheduled Tasks.” #### **Configure the Scheduled Task** **General Tab:** - Action: Create - Name: Enter a descriptive name for the task (e.g., "RestartVMIfNoUser"). - Description: Add a meaningful description (e.g., "Restarts VM if no user is logged in"). - Select the BUILTIN\Administrators or an appropriate service account, with permission to reboot domain machines. - Security Options: - Select Run whether user is logged on or not. - Select Run with highest privileges. **Triggers Tab:** - Click New to create a trigger. - Configure the trigger: - Set the task to run at daily/weekly as needed. - Adjust the delay or repeat interval as required. **Actions Tab:** - Click New to create an action. - Configure the action: - Action: Start a program. - Program/script: `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Executionpolicy Bypass -WindowStyle hidden ` - Add Arguments:` -File "\\<domain>\SYSVOL\<domain>\scripts\ScheduledReboot.ps1" ` **Conditions Tab:** - Adjust the Conditions as required. **Settings Tab:** - Check Allow task to be run on demand. - Adjust the settings as required. #### **Apply and test the GPO** - Close the Group Policy Management Editor to save the changes. - Link the GPO to the desired OU if it isn’t already linked. **Note: Do validate the Policy Security filter, which group of users, groups and Computers selected.** - Restart or force GPO Update on Target Machines by running “gpupdate /force” ### **3. Verify the Task Deployment** - On a target VM, confirm that the task runs successfully by verifying logs in “Event Viewer > Windows Logs > System.“