From b957a66b3dce41ff6c83e8e5075f5351cc6bcb6a Mon Sep 17 00:00:00 2001 From: Manuel Thalmann Date: Wed, 31 Jul 2024 16:09:50 +0200 Subject: [PATCH] Implement the windows installation in a loop --- scripts/Windows/OS/Install.ps1 | 58 +++++++++++++++---------- scripts/Windows/Scripts/SetupConfig.ps1 | 19 ++++++++ 2 files changed, 53 insertions(+), 24 deletions(-) diff --git a/scripts/Windows/OS/Install.ps1 b/scripts/Windows/OS/Install.ps1 index 304386ad..a97cc4f5 100644 --- a/scripts/Windows/OS/Install.ps1 +++ b/scripts/Windows/OS/Install.ps1 @@ -10,38 +10,48 @@ . "$PSScriptRoot/Upgrade.ps1"; . "$PSScriptRoot/User/Install.ps1"; +<# + Finishes the installation of a running Windows machine. +#> function Start-WindowsInstallation { + Start-InstallationLoop; +} + +<# + .SYNOPSIS + Starts the installation loop. +#> +function Start-InstallationLoop { . "$PSScriptRoot/../Scripts/Choco.ps1"; . "$PSScriptRoot/../Scripts/Hooks.ps1"; . "$PSScriptRoot/../Scripts/PowerManagement.ps1"; . "$PSScriptRoot/../Scripts/SetupConfig.ps1"; while (-not (Get-IsFinished)) { - - } - switch (Get-Stage) { - $null { - Invoke-Hook "Start-Initialization" -Fallback { - if (-not ((Get-Command "choco") -and (Get-Command "refreshenv"))) { - # Install chocolatey - [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; - Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); - Import-Module $env:ChocolateyInstall/helpers/chocolateyProfile.psm1; - refreshenv; - } - - if (-not (Test-ChocoSoftware "powershell-core")) { - choco install -y powershell-core --install-arguments='"ADD_FILE_CONTEXT_MENU_RUNPOWERSHELL=1 ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 REGISTER_MANIFEST=1 USER_MU=1 ENABLE_MU=1"'; - Restart-Intermediate; - return; - } - - if (Test-Path $env:PWSH_PATH) { - Remove-Item -Recurse $env:PWSH_PATH; - } - }; + switch (Get-Stage) { + $null { + Invoke-Hook "Start-Initialization" -Fallback { + if (-not ((Get-Command "choco") -and (Get-Command "refreshenv"))) { + # Install chocolatey + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; + Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); + Import-Module $env:ChocolateyInstall/helpers/chocolateyProfile.psm1; + refreshenv; + } + + if (-not (Test-ChocoSoftware "powershell-core")) { + choco install -y powershell-core --install-arguments='"ADD_FILE_CONTEXT_MENU_RUNPOWERSHELL=1 ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 REGISTER_MANIFEST=1 USER_MU=1 ENABLE_MU=1"'; + Restart-Intermediate; + return; + } + + if (Test-Path $env:PWSH_PATH) { + Remove-Item -Recurse $env:PWSH_PATH; + } + }; + } + Default {} } - Default {} } } diff --git a/scripts/Windows/Scripts/SetupConfig.ps1 b/scripts/Windows/Scripts/SetupConfig.ps1 index 1ac2ab3d..439e7305 100644 --- a/scripts/Windows/Scripts/SetupConfig.ps1 +++ b/scripts/Windows/Scripts/SetupConfig.ps1 @@ -5,6 +5,7 @@ using namespace System.Security.Principal; $null = New-Module { [string] $configRoot = "HKLM:\Software\PortValhalla"; [string] $stageOption = "Stage"; + [string] $finishedOption = "Finished"; [RegistryKey] $key = $null; <# @@ -99,4 +100,22 @@ $null = New-Module { $null = Set-SetupOption $stageOption $Name; } + + <# + .SYNOPSIS + Gets a value indicating whether the setup has finished. + #> + function Get-IsFinished { + return [bool] (Get-SetupOption $finishedOption); + } + + <# + .SYNOPSIS + Sets a value indicating whether the setup has finished. + #> + function Set-IsFinished { + param( + $Value + ) + } }