Script: Ändern des Energiesparplans während eines MDT-Deployments

Benötigte Sourcen

Da in der Windows PE (Preinstallation Environment) von Haus aus keine Energieverwaltungs-Tools mitgeliefert werden müssen diese einmalig von einer bereits existierenden Windows-Installation (Windows 8.1 / Server 2012 oder höher) in den MDT Deployment-Share kopiert werden:

  • %WINDIR%\System32\PowerCfg.exe →
    [MDT-DEPLOYMENT-SHARE]\Scripts\PowerCfg\AMD64
  • %WINDIR%\SysWOW64\PowerCfg.exe
    [MDT-DEPLOYMENT-SHARE]\Scripts\PowerCfg\x86
Script zum Kopieren der Sourcen

Damit die Sourcen auch innerhalb der PE zur Verfügung stehen muss die
LTICopyScripts.wsf (im MDT Script-Verzeichnis)
vor Zeile 105 ..

Main = SUCCESS

.. durch folgenden Scriptblock erweitert werden:

' BEGIN CUSTOM SCRIPTBLOCK
'//---------------------------------------------------------------------
'//  Copy PowerCfg Files
'//---------------------------------------------------------------------
	oLogging.CreateEntry "Creating PowerCfg folders..", LogTypeInfo
	If NOT (oFSO.FolderExists(TargetPath & "PowerCfg")) Then
		oFSO.CreateFolder(TargetPath & "PowerCfg")
	End If
	If NOT (oFSO.FolderExists(TargetPath & "PowerCfg\AMD64")) Then
		oFSO.CreateFolder(TargetPath & "PowerCfg\AMD64")
	End If
	If NOT (oFSO.FolderExists(TargetPath & "PowerCfg\X86")) Then
		oFSO.CreateFolder(TargetPath & "PowerCfg\X86")
	End If
	oLogging.CreateEntry "Copying PowerCfg files..", LogTypeInfo
	oFSO.Copyfile (SourcePath & "PowerCfg\AMD64\powercfg.exe"), (TargetPath & "PowerCfg\AMD64\powercfg.exe"), true
	oFSO.Copyfile (SourcePath & "PowerCfg\X86\powercfg.exe"), (TargetPath & "PowerCfg\X86\powercfg.exe"), true
' END CUSTOM SCRIPTBLOCK	
Main = SUCCESS
Script zum Ändern des Energiesparplans

Nach der Bereitstellung der PowerCfg-Files kann folgendes Script zum Ändern des Energiesparplans verwendet werden:

function Change-MDTPowerplan
{
    <#
        .SYNOPSIS
        Changes powerplan inside a MDT Deployment        
        .DESCRIPTION
        This Scripts changes systems powerplan to High Performance or Ultimate Perfomance - based on the underlying OS.
        It checks wheter it is executed inside or outside a Preinstallation Environment.
        2018 - marcozimmermann.com
    #>
    
    # Check if in PE
    If (Test-Path HKLM:\SYSTEM\ControlSet001\Control\MiniNT) 
    {
        # IN PE
        Write-Host "Running inside WinPE, using MININT files"
        Set-Location "C:\MININT\Scripts\PowerCfg\$env:PROCESSOR_ARCHITECTURE"
        $command = "PowerCfg.exe /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
    }
    Else
    {
        # NOT IN PE
        Write-Host "Running outside WinPE, Using local files"
        Set-Location "$env:SystemRoot\System32"
	    
	    # Check OS version
	    If ((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId -ge 1803)
	    {
	    # Windows 10 / Server Core build 1803 or higher, Server 2019 or higher: Set Powerscheme to "Ultimate Performance"
            $powerscheme = powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
            $powerscheme = $powerscheme.Replace("Power Scheme GUID: ","")
            $powerscheme = $powerscheme.Replace(" (Ultimate Performance)","")
            Write-Host "Setting power scheme to Ultimate Performance"
            $command = "PowerCfg.exe /s $powerscheme"
	    }
	    
        Else 
        {
            # Set Powerscheme to "High Performance"
            Write-Host "Setting power scheme to High Performance" 
            $command = "PowerCfg.exe /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"  
        }
       
    }
    
    Invoke-Expression -Command $command 
}

Change-MdtPowerplan

Dieses Script ist sowohl in der PreInstall, Install und PostInstall-Phase ohne weitere Konfigurationsanpassung lauffähig.
Es erkennt automatisch, ob es in einer PE ausgeführt wird und ändert den Powerplan auf High Performance. Wird es auf einem OS build größer 1803 ausgeführt, wird der neue Energiesparplan Ultimate Perfomance verwendet.

Verwenden des Scripts

Das Script kann über den Punkt Run PowerShell Script ohne weitere Parameter gestartet werden:

Zeitersparnis

Bei einem beispielhaften Deployment eines Server 2016 inkl. kumulativen 2018-10-Update sinkt die Deployment-Zeit um ca. 25%.

 

Download

Change-MDTPowerplan.ps1
LTICopyScripts_custom.wsf

Quellen

Ten Forums: Add or Remove Ultimate Performance Power Plan in Windows 10
Technet: Reducing Deployment Time using Power Management

Disclaimer

Wie immer gilt: Für Vollständigkeit, Fehler redaktioneller und technischer Art, Auslassungen sowie die Richtigkeit der Inhalte wird keine Haftung übernommen. Umsetzung auf eigene Gefahr.