Compare commits
5 commits
d2723a0a08
...
e82c90289c
Author | SHA1 | Date | |
---|---|---|---|
Manuel Thalmann | e82c90289c | ||
Manuel Thalmann | 5e98dcb096 | ||
Manuel Thalmann | caece59f8e | ||
Manuel Thalmann | 807a2644e4 | ||
Manuel Thalmann | 20ba043929 |
|
@ -13,6 +13,10 @@ $null = New-Module {
|
|||
# ToDo: Store "ProgramData/PortValhalla" path somewhere as const
|
||||
$errorPath = "$env:ProgramData/PortValhalla/error.txt";
|
||||
|
||||
$getUserName = {
|
||||
"$(Get-SetupUser)OneShot";
|
||||
}
|
||||
|
||||
$taskSetter = {
|
||||
param([OneShotTask] $Task)
|
||||
Set-SetupOption $taskOption ([string]$Task);
|
||||
|
@ -20,12 +24,17 @@ $null = New-Module {
|
|||
|
||||
function Start-Operation {
|
||||
param(
|
||||
[switch] $NonInteractive,
|
||||
[scriptblock] $Action
|
||||
)
|
||||
|
||||
if (-not $Global:InOperation) {
|
||||
if ($env:DEBUG) {
|
||||
Set-PSDebug -Trace 1;
|
||||
}
|
||||
|
||||
$Global:InOperation = $true;
|
||||
$Global:ErrorActionPreference = 'Inquire';
|
||||
$Global:ErrorActionPreference = $NonInteractive.IsPresent ? 'Continue' : 'Inquire';
|
||||
$env:WSLENV = "CONFIG_MODULE/p";
|
||||
|
||||
if ($env:CONFIG_MODULE) {
|
||||
|
@ -56,12 +65,23 @@ $null = New-Module {
|
|||
#>
|
||||
function Enable-OneShotListener {
|
||||
$tempTask = "PortValhalla Temp";
|
||||
$action = New-ScheduledTaskAction -Execute "pwsh" -Argument ([string](Get-StartupArguments));
|
||||
$user = & $getUserName;
|
||||
$password = [string]([guid]::NewGuid());
|
||||
|
||||
$adminGroup = @{
|
||||
SID = [SecurityIdentifier]::new([WellKnownSidType]::BuiltinAdministratorsSid, $null);
|
||||
}
|
||||
|
||||
$null = New-LocalUser -Name $user -Password (ConvertTo-SecureString -AsPlainText $password);
|
||||
Add-LocalGroupMember -Member $user @adminGroup;
|
||||
$path = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList";
|
||||
$null = New-Item -Force -ErrorAction SilentlyContinue $path;
|
||||
Set-ItemProperty $path -Name $user -Value 0;
|
||||
|
||||
$action = New-ScheduledTaskAction -Execute "pwsh" -Argument "-Command & { $([string](Get-StartupCommand)) } 2>&1 | Tee-Object -FilePath `$env:ProgramData/PortValhalla/OneShotTask.log";
|
||||
schtasks /Create /SC ONEVENT /EC $logName /MO "*[System[Provider[@Name='$logName'] and EventID=$($oneShotTrigger)]]" /TR cmd.exe /TN $tempTask;
|
||||
$trigger = (Get-ScheduledTask $tempTask).Triggers;
|
||||
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest;
|
||||
$task = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger;
|
||||
$null = Register-ScheduledTask -Force $oneShotTaskName -InputObject $task;
|
||||
$null = Register-ScheduledTask -Force $oneShotTaskName -Action $action -Trigger $trigger -RunLevel Highest -User $user -Password $password;
|
||||
$null = Unregister-ScheduledTask -Confirm:$false $tempTask;
|
||||
}
|
||||
|
||||
|
@ -71,6 +91,7 @@ $null = New-Module {
|
|||
#>
|
||||
function Disable-OneShotListener {
|
||||
Unregister-ScheduledTask -Confirm:$false $oneShotTaskName;
|
||||
Remove-LocalUser (& $getUserName);
|
||||
}
|
||||
|
||||
<#
|
||||
|
@ -136,7 +157,7 @@ $null = New-Module {
|
|||
)
|
||||
|
||||
try {
|
||||
Start-Operation @PSBoundParameters;
|
||||
Start-Operation -NonInteractive @PSBoundParameters;
|
||||
}
|
||||
catch {
|
||||
Set-Content -Path $errorPath -Value $Error;
|
||||
|
|
|
@ -43,15 +43,14 @@ $null = New-Module {
|
|||
Generates a script for executing the installer.
|
||||
#>
|
||||
function Get-StartupScript {
|
||||
"pwsh " + (Get-StartupArguments);
|
||||
"pwsh -Command " + (Get-StartupCommand);
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Generates arguments for running the installer using `pwsh`.
|
||||
Generates a command for running the installer using `pwsh`.
|
||||
#>
|
||||
function Get-StartupArguments {
|
||||
"-Command " +
|
||||
function Get-StartupCommand {
|
||||
($env:PWSH_PATH ? "`$env:PWSH_PATH = $(ConvertTo-Injection $env:PWSH_PATH);" : "") +
|
||||
($env:DEBUG ? "`$env:DEBUG = $([int]$env:DEBUG);" : "")
|
||||
"`$env:INSTALLER_SCRIPT = $(ConvertTo-Injection (Resolve-Path $env:INSTALLER_SCRIPT));" +
|
||||
|
@ -70,6 +69,8 @@ $null = New-Module {
|
|||
param(
|
||||
[Parameter(ParameterSetName="System")]
|
||||
[switch] $System,
|
||||
[Parameter(ParameterSetName="DefaultUser", Mandatory)]
|
||||
[switch] $DefaultUser,
|
||||
[Parameter(ParameterSetName="User", Mandatory)]
|
||||
[switch] $User,
|
||||
[Parameter(ParameterSetName="User")]
|
||||
|
@ -77,7 +78,15 @@ $null = New-Module {
|
|||
[RegistryKey] $UserKey
|
||||
)
|
||||
|
||||
if ($User.IsPresent -or $UserKey) {
|
||||
if ($DefaultUser.IsPresent) {
|
||||
Edit-DefaultUserKey {
|
||||
param(
|
||||
[RegistryKey] $Key
|
||||
)
|
||||
|
||||
Register-Setup -UserKey $Key;
|
||||
}
|
||||
} elseif ($User.IsPresent -or $UserKey) {
|
||||
if (-not $UserKey) {
|
||||
$UserKey = Get-Item "HKCU:\";
|
||||
}
|
||||
|
@ -159,15 +168,9 @@ $null = New-Module {
|
|||
[switch] $CurrentUser
|
||||
)
|
||||
|
||||
if ($DefaultUser.ToBool()) {
|
||||
Edit-DefaultUserKey {
|
||||
param(
|
||||
[RegistryKey] $Key
|
||||
)
|
||||
|
||||
Register-Setup -UserKey $Key;
|
||||
}
|
||||
} elseif ($CurrentUser.ToBool()) {
|
||||
if ($DefaultUser.IsPresent) {
|
||||
Register-Setup -DefaultUser;
|
||||
} elseif ($CurrentUser.IsPresent) {
|
||||
Register-Setup -User;
|
||||
} else {
|
||||
Register-Setup;
|
||||
|
|
Loading…
Reference in a new issue