PortValhalla/scripts/Windows/Scripts/Context.ps1

120 lines
3.5 KiB
PowerShell
Raw Normal View History

class Context {
2023-06-21 20:04:18 +00:00
[string]$EntryPoint;
2023-06-16 18:24:37 +00:00
[string]$RootDir;
[string]$BackupName;
2023-06-22 20:56:43 +00:00
[string]$UserName;
2023-06-22 21:04:13 +00:00
[string]$AdminName = "Admin";
[string]$RunOnceName = "PortValhalla";
[string] BackupRoot() {
2023-06-16 18:24:37 +00:00
if (-not $this.RootDir)
{
return Join-Path $PSScriptRoot ".." ".." ".." "backup" $this.BackupName;
}
else
{
return $this.RootDir;
}
}
[string] ArchivePath($name) {
return Join-Path $this.BackupRoot() "$name.7z";
}
[string] FileArchivePath($name) {
return $this.ArchivePath($(Join-Path "Files" $name));
}
[string] SoftwareArchive([string]$softwareName) {
return $this.ArchivePath($softwareName);
}
[void] Backup([string]$sourcePath, [string]$archivePath, [string[]]$arguments) {
if (Test-Path $archivePath) {
Remove-Item -Recurse $archivePath;
}
Start-Process -WorkingDirectory "$sourcePath" `
-FilePath "7z" `
-ArgumentList (
@(
"a",
"-xr!desktop.ini",
2023-06-09 16:21:26 +00:00
"-xr!thumbs.db",
"-xr!Thumbs.db",
$archivePath) + $arguments) `
-Wait `
-NoNewWindow;
}
2023-06-16 18:24:22 +00:00
[void] Restore([string]$archivePath, [string]$destinationPath) {
if (-not (Test-Path -PathType Container $destinationPath)) {
New-Item -ItemType Directory "$destinationPath";
}
Start-Process -WorkingDirectory "$destinationPath" `
-FilePath "7z"
-ArgumentList "x" `
-Wait `
-NoNewWindow;
}
[string] GetTempDirectory() {
$tempDir = Join-Path $([System.IO.Path]::GetTempPath()) $([System.IO.Path]::GetRandomFileName());
$null = New-Item -ItemType Directory $tempDir;
return $tempDir;
}
2023-06-22 20:58:54 +00:00
[void] ProcessDefaultUserKey([System.Action[Microsoft.Win32.RegistryKey]] $action) {
$root = "HKLM:\DefaultUser";
2023-06-25 16:09:47 +00:00
$regRoot = $root.Replace(":", "");
2023-06-25 15:57:23 +00:00
$hivePath = "$env:SystemDrive\Users\Default\NTUSER.dat"
2023-06-25 16:09:47 +00:00
$null = & reg load $regRoot $hivePath;
$action.Invoke((Get-Item $root));
2023-06-25 16:09:47 +00:00
reg unload $regRoot;
}
[Microsoft.Win32.RegistryKey] GetRunOnceKey() {
return $this.GetRunOnceKey($null);
}
[Microsoft.Win32.RegistryKey] GetRunOnceKey([Microsoft.Win32.RegistryKey] $userKey) {
if (-not $userKey) {
$userKey = Get-Item "HKCU:\";
}
2023-06-25 14:33:04 +00:00
Push-Location $userKey.PSPath;
2023-06-25 16:05:55 +00:00
$runOncePath = "Software\Microsoft\Windows\CurrentVersion\RunOnce";
if (-not (Test-Path $runOncePath)) {
New-Item $runOncePath;
}
$result = Get-Item $runOncePath;
2023-06-25 14:28:12 +00:00
Pop-Location;
2023-06-25 14:54:10 +00:00
return $result;
}
[void] RegisterReboot() {
$this.RegisterReboot($null);
}
[void] RegisterReboot([Microsoft.Win32.RegistryKey] $userKey) {
2023-06-25 15:02:44 +00:00
$null = Set-ItemProperty -Path $this.GetRunOnceKey($userKey).PSPath -Name $this.RunOnceName -Value "pwsh `"$($this.EntryPoint)`"" -Type "ExpandString";
}
[void] RegisterNewUserReboot() {
$this.ProcessDefaultUserKey({ param ($root) $this.RegisterReboot($root); });
}
[void] DeregisterNewUserReboot() {
2023-06-25 16:10:23 +00:00
$this.ProcessDefaultUserKey({ param ($root) Remove-Item -Path $this.GetRunOnceKey($root).PSPath });
}
2023-06-22 20:58:54 +00:00
[void] Reboot() {
Write-Host "Restarting Computer...";
$this.RegisterReboot();
2023-06-22 20:58:54 +00:00
Restart-Computer;
2023-06-25 16:11:56 +00:00
exit;
2023-06-22 20:58:54 +00:00
}
}