Implement the windows installation in a loop

This commit is contained in:
Manuel Thalmann 2024-07-31 16:09:50 +02:00
parent 401aa9e41c
commit afb2d1be65
2 changed files with 51 additions and 22 deletions

View file

@ -11,38 +11,48 @@
. "$PSScriptRoot/../Scripts/SetupConfig.ps1"; . "$PSScriptRoot/../Scripts/SetupConfig.ps1";
. "$PSScriptRoot/../Software/Firefox/Install.ps1"; . "$PSScriptRoot/../Software/Firefox/Install.ps1";
<#
Finishes the installation of a running Windows machine.
#>
function Start-WindowsInstallation { function Start-WindowsInstallation {
Start-InstallationLoop;
}
<#
.SYNOPSIS
Starts the installation loop.
#>
function Start-InstallationLoop {
. "$PSScriptRoot/../Scripts/Choco.ps1"; . "$PSScriptRoot/../Scripts/Choco.ps1";
. "$PSScriptRoot/../Scripts/Hooks.ps1"; . "$PSScriptRoot/../Scripts/Hooks.ps1";
. "$PSScriptRoot/../Scripts/PowerManagement.ps1"; . "$PSScriptRoot/../Scripts/PowerManagement.ps1";
. "$PSScriptRoot/../Scripts/SetupConfig.ps1"; . "$PSScriptRoot/../Scripts/SetupConfig.ps1";
while (-not (Get-IsFinished)) { 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")) {
switch (Get-Stage) { 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"';
$null { Restart-Intermediate;
Invoke-Hook "Start-Initialization" -Fallback { return;
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")) { if (Test-Path $env:PWSH_PATH) {
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"'; Remove-Item -Recurse $env:PWSH_PATH;
Restart-Intermediate; }
return; };
} }
Default {}
if (Test-Path $env:PWSH_PATH) {
Remove-Item -Recurse $env:PWSH_PATH;
}
};
} }
Default {}
} }
} }

View file

@ -5,6 +5,7 @@ using namespace System.Security.Principal;
$null = New-Module { $null = New-Module {
[string] $configRoot = "HKLM:\Software\PortValhalla"; [string] $configRoot = "HKLM:\Software\PortValhalla";
[string] $stageOption = "Stage"; [string] $stageOption = "Stage";
[string] $finishedOption = "Finished";
[RegistryKey] $key = $null; [RegistryKey] $key = $null;
<# <#
@ -99,4 +100,22 @@ $null = New-Module {
$null = Set-SetupOption $stageOption $Name; $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
)
}
} }