PortValhalla/scripts/Windows/Scripts/PowerManagement.ps1

50 lines
1.4 KiB
PowerShell

using namespace Microsoft.Win32;
$null = New-Module {
. "$PSScriptRoot/../../Common/Scripts/Scripting.ps1";
[RegistryKey] $key = $null;
$runOncePath = "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce";
$runOnceName = "PortValhalla";
<#
.SYNOPSIS
Gets the reghistry key containing the `RunOnce` commands.
#>
function Get-RunOnceKey {
Get-Item $runOncePath;
}
<#
.SYNOPSIS
Registers a task to run the setup once after the next reboot.
.PARAMETER UserKey
The regtistry key of the user to register the task for.
#>
function Register-Setup {
param(
[RegistryKey] $UserKey
)
$key = Get-RunOnceKey $UserKey;
Set-ItemProperty -Path $key.PSPath -Name $runOnceName -Type "ExpandString" -Value (
"pwsh -Command " +
"`$env:PWSH_PATH = $(ConvertTo-Injection $env:PWSH_PATH);" +
"`$env:INSTALLER_SCRIPT = $(ConvertTo-Injection $env:INSTALLER_SCRIPT);" +
"`$env:CONFIG_MODULE = $(ConvertTo-Injection $env:CONFIG_MODULE);" +
"& `$env:INSTALLER_SCRIPT;"
);
$key.Handle.Close();
}
<#
.SYNOPSIS
Reboots the machine intermediately and restarts the setup after the next login.
#>
function Restart-Intermediate {
Register-Setup;
Restart-Computer;
}
}