Controlling the Windows Power Plan with PowerShell

I’ve been using a Windows laptop for presenting while traveling. Yes, it’s heavy. Yes, it’s big. Yes, it’s weird compared to my MacBook. But, it works.

More Power, More Problems

When I’m on a plane, I want to make sure that I’m getting every last drop of power out of the battery. When I’m presenting, I want to power up the CPUs so I’m not getting weird results in demos because of power saving in the CPU.

I’m also lazy and, frequently, I don’t have a mouse next to me while I present.

More PowerShell

Thanks to Robert Davis’s post Enabligh High Perofrmance Power Plan via PowerShell, I knew that I could use a pretty simple command to switch the power plan:

Try {
    $HighPerf = powercfg -l | %{if($_.contains("High performance")) {$_.split()[3]}}
    $CurrPlan = $(powercfg -getactivescheme).split()[3]
    if ($CurrPlan -ne $HighPerf) {powercfg -setactive $HighPerf}
} Catch {
    Write-Warning -Message "Unable to set power plan to high performance"
}

That’s great, but I don’t want to type that every time I want to change the power plan. I’m lazy, remember?

More Modules

I could have created multiple functions in my PowerShell profile, but instead I created a module. The first step, really, was to create a file with a bunch of code in it. After banging around for a while, I came up with:

function Set-PowerPlan ($powerPlan = "balanced") {
    try {
        $powerPlan = $powerPlan.toLower()
        $perf = powercfg -l | %{if($_.toLower().contains($powerPlan)) {$_.split()[3]}}
        $currentPlan = $(powercfg -getactivescheme).split()[3]

        if ($currentPlan -ne $perf) {
            powercfg -setactive $perf
        }
    } catch {
        Write-Warning -Message "Unabled to set power plan to $powerPlan"
    }
}

function Set-PowerSaver {
    Set-PowerPlan("power saver")
}

function Set-PowerHighPerformance {
    Set-PowerPlan("high performance")
}

function Set-PowerBalanced {
    Set-PowerPlan("balanced")
}

This uses some basic string matching magic to try to match a power plan. I could keep using theSet-PowerPlan commandlet to change the power plan, but that’s a lot of typing. Since I don’t add new power plans to Windows, I created three shortcuts to set the power plan for me.

Reusing the Module

The basic steps to module re-use are:

  1. Create an appropriately named folder in your Modules folder. Mine is named PowerPlan.
  2. Create a file in the module folder. This was also called PowerPlan.psm1.
  3. Check that the module is available using Get-Module -ListAvailable.
  4. If available, run Import-Module PowerPlan.

If you always want the PowerPlan module loaded, you can added the line Import-Module PowerPlan to your PowerShell profile (which defaults ot Microsoft.PowerShell_profile.ps1).

Once I’ve imported the module, I just have to open up a PowerShell window and type Set-Power and then I can use TAB to cycle through the possible completions.

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Menu