How to Force a Specific Refresh Rate via PowerShell on Windows 11
🔍 WiseChecker

How to Force a Specific Refresh Rate via PowerShell on Windows 11

Setting a custom refresh rate on Windows 11 through the Settings app is straightforward for most monitors, but sometimes the display driver or the operating system does not list the exact refresh rate you need. This can happen with high-refresh-rate monitors that support multiple non-standard rates, or when you want to overclock a display to a frequency not advertised by the manufacturer. PowerShell provides a direct way to query and set display modes, bypassing the graphical interface. This article explains how to use the Windows Display Driver Model cmdlets to force a specific refresh rate on Windows 11.

Key Takeaways: Force a Refresh Rate with PowerShell on Windows 11

  • Get-PnpDeviceProperty -KeyName “DEVMODE” Queries the current display settings including refresh rate from the device driver
  • Add-ComputerDisplayMonitorResolution Adds a custom resolution and refresh rate to the display mode list
  • Set-WmiInstance -Class Win32_VideoController Changes the active refresh rate on the primary display adapter

ADVERTISEMENT

Understanding Display Refresh Rate and PowerShell Cmdlets

Windows 11 manages display modes through a combination of the Graphics Device Driver Interface and the Windows Display Driver Model. Each display mode is defined by a resolution, a color depth, and a refresh rate. The operating system maintains a list of supported modes that the monitor reports through its Extended Display Identification Data. When you force a refresh rate via PowerShell, you are either adding a custom mode that the monitor can accept or selecting an existing mode that the Settings app does not expose.

PowerShell accesses these modes through the Windows Management Instrumentation classes Win32_VideoController and CIM_VideoControllerResolution. The Get-WmiObject and Set-WmiInstance cmdlets allow you to read and write to these classes. You also use the Get-PnpDeviceProperty cmdlet to retrieve device-specific properties. These commands require administrative privileges because they modify system-level display settings.

Before running any PowerShell commands, ensure your monitor supports the target refresh rate. Forcing an unsupported rate can cause a blank screen or damage the monitor. If the screen goes blank, restart the computer in Safe Mode and revert the changes. The steps below assume you have a single monitor setup. For multiple monitors, you must specify the correct instance of the video controller.

Steps to Force a Specific Refresh Rate via PowerShell

  1. Open PowerShell as Administrator
    Press the Windows key, type PowerShell, right-click Windows PowerShell from the search results, and select Run as administrator. Click Yes on the User Account Control prompt.
  2. Query the current display configuration
    Run the following command to list all video controllers and their current settings:
    Get-WmiObject -Namespace root\cimv2 -Class Win32_VideoController | Select-Object Name, CurrentHorizontalResolution, CurrentVerticalResolution, CurrentRefreshRate, Status
    Note the CurrentRefreshRate value in Hertz. This is your current active refresh rate.
  3. List all available display modes
    Run this command to see every supported resolution and refresh rate combination for the primary monitor:
    Get-WmiObject -Namespace root\cimv2 -Class CIM_VideoControllerResolution | Where-Object {$_.SettingID -like ""} | Format-Table -AutoSize
    The output shows columns like HorizontalResolution, VerticalResolution, RefreshRate, and ScanMode. Locate the row that matches your desired resolution and the target refresh rate.
  4. Force a specific refresh rate by setting the video controller
    Run the following command, replacing 60 with your target refresh rate in Hertz and 1920 and 1080 with your resolution:
    $monitor = Get-WmiObject -Namespace root\cimv2 -Class Win32_VideoController
    $monitor.SetDisplayMode(1920, 1080, 32, 60)

    The parameters are: width, height, color depth in bits, and refresh rate. A return value of 0 indicates success. If the command returns 1 or 2, the mode is not supported.
  5. Verify the new refresh rate
    Run the query from step 2 again to confirm the CurrentRefreshRate changed to your target value. Alternatively, open Settings > System > Display > Advanced display and check the Refresh rate dropdown.
  6. Add a custom display mode if the desired rate is missing
    If the target refresh rate does not appear in the list, you can add a custom mode using the Add-ComputerDisplayMonitorResolution cmdlet available in Windows 11 version 22H2 and later. Run:
    Add-ComputerDisplayMonitorResolution -Width 1920 -Height 1080 -RefreshRate 144 -Format "R8G8B8A8"
    Replace the values with your desired settings. The Format parameter accepts R8G8B8A8 for 32-bit color. After adding the mode, repeat step 4 to apply it.
  7. Persist the setting across reboots
    The SetDisplayMode method is temporary and resets after a reboot or driver restart. To make the change permanent, create a scheduled task that runs the PowerShell command at startup. Open Task Scheduler, create a new task with trigger At startup, action Start a program, program powershell.exe, arguments -Command "& {Get-WmiObject -Namespace root\cimv2 -Class Win32_VideoController | % {$_.SetDisplayMode(1920,1080,32,144)}}".

ADVERTISEMENT

Common Issues When Forcing a Refresh Rate via PowerShell

“SetDisplayMode returns error code 1 or 2”

Error code 1 means the mode is not supported by the monitor or the graphics driver. Error code 2 indicates a general failure. Verify that your monitor supports the target refresh rate at the specified resolution. Check the manufacturer specifications. Also ensure the graphics driver is up to date. Download the latest driver from the GPU vendor’s website, not from Windows Update.

“PowerShell says Add-ComputerDisplayMonitorResolution is not recognized”

This cmdlet is available only in Windows 11 version 22H2 or newer and requires the Display module. Run Get-Module -ListAvailable -Name Display to verify the module is installed. If it is missing, install it with Install-Module -Name Display -Force from an elevated PowerShell session. After installation, import the module with Import-Module Display.

“Screen goes blank after changing refresh rate”

If the monitor cannot display the forced refresh rate, the screen may go black. Wait 15 seconds and press the Windows key + Ctrl + Shift + B to reset the graphics driver. If that does not work, restart the computer into Safe Mode by holding the Shift key while clicking Restart from the login screen. In Safe Mode, run the PowerShell command to revert to a known good refresh rate, such as 60 Hz.

“Change does not persist after reboot”

The SetDisplayMode method does not write the setting to the registry or the driver configuration. It only changes the active mode for the current session. Use the scheduled task method described in step 7 to reapply the refresh rate automatically at each startup. Alternatively, use a third-party tool like CRU Custom Resolution Utility to add the mode permanently to the driver’s extension block.

PowerShell Refresh Rate Methods vs Settings App

Item PowerShell Method Settings App
Access method Command-line with administrative privileges Graphical interface through Settings > System > Display > Advanced display
Refresh rate options shown All modes reported by the driver, including non-standard rates Only modes that Windows considers optimal or safe
Custom mode support Can add custom modes via Add-ComputerDisplayMonitorResolution No native custom mode support
Persistence Session-only unless scheduled task is created Persistent across reboots
Error recovery Requires Safe Mode or graphics driver reset shortcut Automatic revert after 15 seconds if no confirmation

The Settings app is safer for everyday use because it automatically reverts to the previous refresh rate if you do not confirm the change within 15 seconds. PowerShell gives you more control over non-standard modes but requires manual recovery steps. Use PowerShell only when the Settings app does not list the refresh rate you need, such as 144 Hz on a monitor that officially supports only 120 Hz.

You can now force a specific refresh rate on Windows 11 using PowerShell commands. Start by querying the current configuration with Get-WmiObject and then apply the target rate with SetDisplayMode. If the desired rate is not listed, add it with Add-ComputerDisplayMonitorResolution and create a scheduled task to make the change permanent. For advanced users, the Set-WmiInstance class allows scripting multiple display changes across different monitors in a single script.

ADVERTISEMENT