#Requires -RunAsAdministrator

$windir = [Environment]::GetFolderPath('Windows')
& "$windir\AtlasModules\initPowerShell.ps1"

Write-Host "`nRestoring default power schemes..." -ForegroundColor Yellow
# This should set the power plan to 'Balanced' by default
powercfg /restoredefaultschemes | Out-Null

Write-Host "Enabling power-saving ACPI devices..." -ForegroundColor Yellow
& toggleDev.cmd -Enable '@("ACPI Processor Aggregator", "Microsoft Windows Management Interface for ACPI")' | Out-Null

Write-Host "Enabling device power-saving..." -ForegroundColor Yellow
$keys = Get-ChildItem -Path "HKLM:\SYSTEM\CurrentControlSet\Enum" -Recurse -EA 0
foreach ($value in @(
    "AllowIdleIrpInD3",
    "D3ColdSupported",
    "DeviceSelectiveSuspended",
    "EnableIdlePowerManagement",
    "EnableSelectiveSuspend",
    "EnhancedPowerManagementEnabled",
    "IdleInWorkingState",
    "SelectiveSuspendEnabled",
    "SelectiveSuspendOn",
    "WaitWakeEnabled",
    "WakeEnabled",
    "WdfDirectedPowerTransitionEnable"
)) {
    $oldValue = "$value-OLD"
    $keys | Where-Object { $_.GetValueNames() -contains $oldValue } | ForEach-Object {
        $keyPath = $_.PSPath
        Remove-ItemProperty -Path $keyPath -Name $value
        Rename-ItemProperty -Path $keyPath -Name $oldValue -NewName $value
    }
}

Write-Host "Enabling network adapter power saving..." -ForegroundColor Yellow
# Set power saving mode for all network cards to default
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NDIS\Parameters" -Name "DefaultPnPCapabilities" -Value 0
# Configure network adapter settings
$properties = Get-NetAdapter -Physical | Get-NetAdapterAdvancedProperty
foreach ($setting in @(
    # Stands for Ultra Low Power
    "ULPMode",

    # Energy Efficient Ethernet
    "EEE",
    "EEELinkAdvertisement",
    "AdvancedEEE",
    "EnableGreenEthernet",
    "EeePhyEnable",

    # Wi-Fi capability that saves power consumption
    "uAPSDSupport",

    # Self-explanatory
    "EnablePowerManagement",
    "EnableSavePowerNow",
    "bLowPowerEnable",
    "PowerSaveMode",
    "PowerSavingMode",
    "SavePowerNowEnabled",
    "AutoPowerSaveModeEnabled",
    "NicAutoPowerSaver",
    "SelectiveSuspend"
)) {
    $properties | Where-Object { $_.RegistryKeyword -eq "*$setting" -or $_.RegistryKeyword -eq $setting } | Reset-NetAdapterAdvancedProperty
}
Get-CimInstance -ClassName MSPower_DeviceEnable -Namespace root/WMI | Set-CimInstance -Property @{ Enable = $true }

Write-Host "Enabling miscellaneous power-saving..." -ForegroundColor Yellow
# Disable D3 support on SATA/NVMEs while using Modern Standby
# Reference: https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/power-management-for-storage-hardware-devices-intro#d3-support
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Storage" -Name "StorageD3InModernStandby" -ErrorAction SilentlyContinue
# Disable IdlePowerMode for stornvme.sys (storage devices) - the device will never enter a low-power state
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\stornvme\Parameters\Device" -Name "IdlePowerMode" -ErrorAction SilentlyContinue
# Reset power throttling to default
# Reference: https://blogs.windows.com/windows-insider/2017/04/18/introducing-power-throttling
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling" -Name "PowerThrottlingOff" -ErrorAction SilentlyContinue

# Finish
Read-Pause "`nCompleted.`nPress Enter to exit"