Compare commits
5 commits
25b6baf9ff
...
a9ae57e16f
Author | SHA1 | Date | |
---|---|---|---|
Manuel Thalmann | a9ae57e16f | ||
Manuel Thalmann | e9778289b8 | ||
Manuel Thalmann | 2473235dd4 | ||
Manuel Thalmann | 06d65bedd6 | ||
Manuel Thalmann | 7b66950e76 |
|
@ -9,12 +9,20 @@ enum SetupStage {
|
|||
Configure
|
||||
Install
|
||||
CreateUser
|
||||
ConfigureUser
|
||||
}
|
||||
|
||||
enum UserStage {
|
||||
Create
|
||||
Configure
|
||||
Completed
|
||||
}
|
||||
|
||||
$null = New-Module {
|
||||
[string] $configRoot = "HKLM:\Software\PortValhalla";
|
||||
[string] $stageOption = "Stage";
|
||||
[string] $userOption = "SetupUser";
|
||||
[string] $userStageOption = "UserStage";
|
||||
[string] $accountOption = "MSAccount";
|
||||
[string] $finishedOption = "Finished";
|
||||
[RegistryKey] $key = $null;
|
||||
|
||||
|
@ -273,6 +281,85 @@ $null = New-Module {
|
|||
$null = Set-SetupOption $stageOption $Name;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the current user to set up.
|
||||
#>
|
||||
function Get-CurrentUser {
|
||||
return (Get-SetupOption $userOption) ?? 0;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets the index of the current user to set up.
|
||||
|
||||
.PARAMETER Value
|
||||
The index of the user to set up.
|
||||
#>
|
||||
function Set-CurrentUser {
|
||||
param(
|
||||
[int] $Value
|
||||
)
|
||||
|
||||
Set-SetupOption $userOption $value;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the name of the current stage of the user setup.
|
||||
#>
|
||||
function Get-UserStage {
|
||||
$stage = Get-SetupOption $userStageOption;
|
||||
|
||||
if ($null -ne $stage) {
|
||||
$stage = [UserStage]$stage;
|
||||
}
|
||||
|
||||
return $stage;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets the current stage of the user setup.
|
||||
|
||||
.PARAMETER Name
|
||||
The name of the stage to set.
|
||||
#>
|
||||
function Set-UserStage {
|
||||
param(
|
||||
$Name
|
||||
)
|
||||
|
||||
if (-not (($null -eq $Name) -or ($Name -is [string]))) {
|
||||
$Name = ([UserStage]$Name).ToString();
|
||||
}
|
||||
|
||||
$null = Set-SetupOption $userStageOption $Name;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the name of the microsoft account to create.
|
||||
#>
|
||||
function Get-MSAccountName {
|
||||
return Get-SetupOption $accountOption;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets the name of the microsoft account to create.
|
||||
|
||||
.PARAMETER Name
|
||||
The name of the microsoft account to create.
|
||||
#>
|
||||
function Set-MSAccountName {
|
||||
param(
|
||||
[string] $Name
|
||||
)
|
||||
|
||||
Set-SetupOption $accountOption $Name;
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets a value indicating whether the setup has finished.
|
||||
|
|
|
@ -46,20 +46,6 @@ $null = New-Module {
|
|||
break;
|
||||
}
|
||||
([SetupStage]::Initialize) {
|
||||
if ($env:DEBUG) {
|
||||
& {
|
||||
$sys32 = "$env:WINDIR/System32";
|
||||
$osk = "$sys32/osk.exe";
|
||||
$cmd = "$sys32/cmd.exe";
|
||||
|
||||
if ((Get-FileHash $osk) -ne (Get-FileHash $cmd)) {
|
||||
Rename-Item $osk "${osk}_";
|
||||
Copy-Item $cmd $osk;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-not ((Test-Command "choco") -and (Test-Command "refreshenv"))) {
|
||||
Invoke-Hook "Install-Chocolatey" -Fallback {
|
||||
# Install chocolatey
|
||||
|
@ -72,60 +58,84 @@ $null = New-Module {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (-not (Test-Command "gsudo")) {
|
||||
Install-ChocoPackage gsudo;
|
||||
refreshenv;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (-not (Test-Command "git")) {
|
||||
Install-ChocoPackage git;
|
||||
refreshenv;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (-not (Test-ChocoPackage "powershell-core")) {
|
||||
Invoke-Hook "Install-PowerShellCore" -Fallback {
|
||||
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"';
|
||||
};
|
||||
|
||||
if ($env:DEBUG) {
|
||||
if (
|
||||
(Test-Qemu) -and
|
||||
($Host.UI.PromptForChoice(
|
||||
Restart-Intermediate;
|
||||
return;
|
||||
}
|
||||
|
||||
if ($env:PWSH_PATH -and (Test-Path $env:PWSH_PATH)) {
|
||||
attrib "-R" "$env:PWSH_PATH\*" /S /D;
|
||||
Remove-Item -Recurse -Force $env:PWSH_PATH;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($env:DEBUG) {
|
||||
if (
|
||||
(Get-Item $env:INSTALLER_SCRIPT).IsReadOnly -and
|
||||
(Test-Qemu) -and
|
||||
($Host.UI.PromptForChoice(
|
||||
"Confirm",
|
||||
"Do you wish to swap to live scripts?",
|
||||
[ChoiceDescription[]]@(
|
||||
[ChoiceDescription]::new("&No", "Use scripts stored in the virtual machine"),
|
||||
[ChoiceDescription]::new("&Yes", "Use live scripts stored on the host")),
|
||||
0) -eq 1)) {
|
||||
Install-ChocoPackage winfsp qemu-guest-agent;
|
||||
Get-Service VirtioFsSvc | Start-Service -PassThru | Set-Service -StartupType Automatic;
|
||||
Install-ChocoPackage winfsp qemu-guest-agent;
|
||||
Get-Service VirtioFsSvc | Start-Service -PassThru | Set-Service -StartupType Automatic;
|
||||
|
||||
while (-not (Test-Path Z:\)) {
|
||||
Start-Sleep 0.1;
|
||||
}
|
||||
while (-not (Test-Path Z:\)) {
|
||||
Start-Sleep 0.1;
|
||||
}
|
||||
|
||||
foreach ($name in @("CONFIG_MODULE", "INSTALLER_SCRIPT")) {
|
||||
$variable = Get-Item "Env:\$name";
|
||||
foreach ($name in @("CONFIG_MODULE", "INSTALLER_SCRIPT")) {
|
||||
$variable = Get-Item "Env:\$name";
|
||||
|
||||
$path = Join-Path `
|
||||
"Z:\Repositories\PortValhalla" `
|
||||
([System.IO.Path]::GetRelativePath("$PSScriptRoot/../../..", $variable.Value));
|
||||
$path = Join-Path `
|
||||
"Z:\Repositories\PortValhalla" `
|
||||
([System.IO.Path]::GetRelativePath("$PSScriptRoot/../../..", $variable.Value));
|
||||
|
||||
Set-Item "Env:\$name" $path;
|
||||
Write-Host "The new value of ``$name`` is ``$path``";
|
||||
}
|
||||
Set-Item "Env:\$name" $path;
|
||||
Write-Host "The new value of ``$name`` is ``$path``";
|
||||
}
|
||||
|
||||
Restart-Intermediate;
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (Test-Command "gsudo")) {
|
||||
Install-ChocoPackage gsudo;
|
||||
refreshenv;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($env:DEBUG) {
|
||||
& {
|
||||
$sys32 = "$env:WINDIR/System32";
|
||||
$osk = (Get-Item "$sys32/osk.exe").FullName;
|
||||
$cmd = (Get-Item "$sys32/cmd.exe").FullName;
|
||||
$tmpOsk = New-TemporaryFile;
|
||||
$tmpCmd = New-TemporaryFile;
|
||||
gsudo -d copy "$osk" "$tmpOsk";
|
||||
gsudo -d copy "$cmd" "$tmpCmd";
|
||||
|
||||
if ((Get-FileHash $tmpOsk).Hash -ne (Get-FileHash $tmpCmd).Hash) {
|
||||
Set-MpPreference -ExclusionPath $osk;
|
||||
gsudo -d --ti move $osk "${osk}_";
|
||||
gsudo -d -s copy $cmd $osk;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
Restart-Intermediate;
|
||||
return;
|
||||
}
|
||||
|
||||
if ($env:PWSH_PATH -and (Test-Path $env:PWSH_PATH)) {
|
||||
attrib "-R" "$env:PWSH_PATH\*" /S /D;
|
||||
Remove-Item -Recurse -Force $env:PWSH_PATH;
|
||||
|
||||
if (-not (Test-Command "git")) {
|
||||
Install-ChocoPackage git;
|
||||
refreshenv;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -195,6 +205,7 @@ $null = New-Module {
|
|||
switch (Get-OneShotTask) {
|
||||
([OneShotTask]::InitializeMSAccount) {
|
||||
Initialize-UserCreation;
|
||||
Register-Setup -DefaultUser;
|
||||
}
|
||||
([OneShotTask]::DisableUAC) {
|
||||
Disable-UAC;
|
||||
|
@ -231,7 +242,7 @@ $null = New-Module {
|
|||
[Nullable[InstallerAction]] $Action = $null
|
||||
)
|
||||
|
||||
[bool] $install = $null;
|
||||
[bool] $install = $false;
|
||||
$arguments = [hashtable]@{ };
|
||||
|
||||
if ($null -ne $Action) {
|
||||
|
@ -560,7 +571,6 @@ $null = New-Module {
|
|||
New-ValhallaUser $name;
|
||||
|
||||
if ($msAccount) {
|
||||
Register-Setup -DefaultUser;
|
||||
logoff;
|
||||
} else {
|
||||
Restart-Intermediate;
|
||||
|
|
Loading…
Reference in a new issue