Classes/PowerManager.ps1

class PowerManager {
    [LibraryContext]$Context
    [int]$DefaultMonitorTimeoutAc
    [int]$DefaultMonitorTimeoutDc
    [int]$DefaultDiskTimeoutAc
    [int]$DefaultDiskTimeoutDc
    [int]$DefaultStandbyTimeoutAc
    [int]$DefaultStandbyTimeoutDc
    [int]$DefaultHibernateTimeoutAc
    [int]$DefaultHibernateTimeoutDc

    PowerManager([LibraryContext]$context) {
        $this.Context = $context

        $this.DefaultMonitorTimeoutAc = 90
        $this.DefaultMonitorTimeoutDc = 45
        $this.DefaultDiskTimeoutAc = 30
        $this.DefaultDiskTimeoutDc = 20
        $this.DefaultStandbyTimeoutAc = 100
        $this.DefaultStandbyTimeoutDc = 55
        $this.DefaultHibernateTimeoutAc = 120
        $this.DefaultHibernateTimeoutDc = 90
    }

    # Power settings setter
    [void]SetPowerSettings (
        [int]$MonitorTimeoutAc,
        [int]$MonitorTimeoutDc,
        [int]$DiskTimeoutAc,
        [int]$DiskTimeoutDc,
        [int]$StandbyTimeoutAc,
        [int]$StandbyTimeoutDc,
        [int]$HibernateTimeoutAc,
        [int]$HibernateTimeoutDc
        ) {

            # set defaults
            if (-not $MonitorTimeoutAc)   { $MonitorTimeoutAc = $this.DefaultMonitorTimeoutAc }
            if (-not $MonitorTimeoutDc)   { $MonitorTimeoutDc = $this.DefaultMonitorTimeoutDc }
            if (-not $DiskTimeoutAc)      { $DiskTimeoutAc = $this.DefaultDiskTimeoutAc }
            if (-not $DiskTimeoutDc)      { $DiskTimeoutDc = $this.DefaultDiskTimeoutDc }
            if (-not $StandbyTimeoutAc)   { $StandbyTimeoutAc = $this.DefaultStandbyTimeoutAc }
            if (-not $StandbyTimeoutDc)   { $StandbyTimeoutDc = $this.DefaultStandbyTimeoutDc }
            if (-not $HibernateTimeoutAc) { $HibernateTimeoutAc = $this.DefaultHibernateTimeoutAc }
            if (-not $HibernateTimeoutDc) { $HibernateTimeoutDc = $this.DefaultHibernateTimeoutDc }

            $settings = @{
                "monitor-timeout-ac" = $MonitorTimeoutAc
                "monitor-timeout-dc" = $MonitorTimeoutDc
                "disk-timeout-ac" = $DiskTimeoutAc
                "disk-timeout-dc" = $DiskTimeoutDc
                "standby-timeout-ac" = $StandbyTimeoutAc
                "standby-timeout-dc" = $StandbyTimeoutDc
                "hibernate-timeout-ac" = $HibernateTimeoutAc
                "hibernate-timeout-dc" = $HibernateTimeoutDc
            }

            foreach ($setting in $settings.GetEnumerator()) {
                if ($setting.Value -ne $null) {
                    $this.Context.LogManager.Log("Setting $($setting.Key) to $($setting.Value) minutes")
                    powercfg /change $setting.Key $setting.Value
                }
            }
        }
}