---
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
---

> ## 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 `\\&lt;DomainName&gt;\SYSVOL\&lt;DomainName&gt;\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\&lt;domain&gt;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 "\\&lt;domain&gt;\SYSVOL\&lt;domain&gt;\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.“
