From bec10de9ad602f7eef80eade9d209b4bbc5caf76 Mon Sep 17 00:00:00 2001 From: Manuel Thalmann Date: Wed, 31 Jul 2024 15:41:45 +0200 Subject: [PATCH] Add a script for rebooting the computer --- scripts/Windows/Scripts/PowerManagement.ps1 | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 scripts/Windows/Scripts/PowerManagement.ps1 diff --git a/scripts/Windows/Scripts/PowerManagement.ps1 b/scripts/Windows/Scripts/PowerManagement.ps1 new file mode 100644 index 00000000..d5864933 --- /dev/null +++ b/scripts/Windows/Scripts/PowerManagement.ps1 @@ -0,0 +1,48 @@ +using namespace Microsoft.Win32; +. "$PSScriptRoot/Scripting.ps1"; + +$null = New-Module { + [RegistryKey] $key = $null; + $runOncePath = "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce"; + + <# + .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; + } +}