Files
Win11Debloat/Scripts/GUI/Show-RestoreBackupWindow.ps1
T

116 lines
4.8 KiB
PowerShell
Raw Normal View History

<#
.SYNOPSIS
Shows the backup-restore dialog and performs the selected restore.
#>
2026-05-08 21:19:52 +02:00
function Show-RestoreBackupWindow {
param(
[System.Windows.Window]$Owner = $null
)
try {
Write-Host 'Opening restore backup dialog.'
$restoreResult = [PSCustomObject]@{
RestoredRegistry = $false
RestoredStartMenu = $false
}
2026-05-08 21:19:52 +02:00
$dialogResult = Show-RestoreBackupDialog -Owner $Owner
if (-not $dialogResult -or $dialogResult.Result -eq 'Cancel') {
Write-Host 'Restore canceled by user.'
return $restoreResult
2026-05-08 21:19:52 +02:00
}
$successMessage = $null
$warningMessage = $null
if ($dialogResult.Result -eq 'RestoreRegistry') {
$backup = $dialogResult.Backup
if (-not $backup) {
throw 'Registry backup restore requested without a selected backup.'
}
Write-Host "User confirmed registry restore for $($backup.Target)."
$restoreOpResult = Restore-RegistryBackupState -Backup $backup
if ($restoreOpResult -and $restoreOpResult.Result) {
$restoreResult.RestoredRegistry = $true
if ($script:Params.ContainsKey("WhatIf")) {
$successMessage = Get-Translation -Key 'RestoreRegistryWhatIfMessage'
}
else {
$successMessage = Get-Translation -Key 'RestoreRegistrySuccessMessage'
}
}
2026-05-08 21:19:52 +02:00
}
elseif ($dialogResult.Result -eq 'Restore-StartMenu') {
2026-05-08 21:19:52 +02:00
$scope = $dialogResult.StartMenuScope
$useManualBackupFile = ($dialogResult.UseManualBackupFile -eq $true)
$backupFilePath = $null
if ($dialogResult -is [hashtable] -and $dialogResult.ContainsKey('BackupFilePath')) {
$backupFilePath = $dialogResult['BackupFilePath']
}
elseif ($dialogResult.PSObject.Properties.Match('BackupFilePath').Count -gt 0) {
$backupFilePath = $dialogResult.BackupFilePath
}
if ($useManualBackupFile -and [string]::IsNullOrWhiteSpace($backupFilePath)) {
throw 'Start Menu restore canceled: no backup file selected.'
}
$result = if ($scope -eq 'AllUsers') {
Restore-StartMenuForAllUsers -BackupFilePath $backupFilePath
2026-05-08 21:19:52 +02:00
}
else {
Restore-StartMenu -BackupFilePath $backupFilePath
2026-05-08 21:19:52 +02:00
}
$resultEntries = @($result)
$successCount = @($resultEntries | Where-Object { $_.Result -eq $true }).Count
$failedEntries = @($resultEntries | Where-Object { $_.Result -ne $true })
if ($successCount -eq 0) {
$errorSummary = ($resultEntries | ForEach-Object { $_.Message }) -join [Environment]::NewLine
throw (Get-Translation -Key 'RestoreStartMenuFailedMessage' -FormatArgs @($errorSummary))
2026-05-08 21:19:52 +02:00
}
if ($failedEntries.Count -gt 0) {
$failureSummary = ($failedEntries | ForEach-Object { $_.Message }) -join [Environment]::NewLine
$warningMessage = Get-Translation -Key 'RestoreStartMenuPartialSuccessMessage' -FormatArgs @($successCount, $failureSummary)
2026-05-08 21:19:52 +02:00
}
else {
if ($script:Params.ContainsKey("WhatIf")) {
$successMessage = Get-Translation -Key 'RestoreStartMenuWhatIfMessage'
}
elseif ($scope -eq 'AllUsers') {
$successMessage = Get-Translation -Key 'RestoreStartMenuAllUsersSuccessMessage'
2026-05-08 21:19:52 +02:00
}
else {
$successMessage = Get-Translation -Key 'RestoreStartMenuCurrentUserSuccessMessage'
2026-05-08 21:19:52 +02:00
}
}
$restoreResult.RestoredStartMenu = $true
2026-05-08 21:19:52 +02:00
}
if ($warningMessage) {
Write-Host "$warningMessage"
Show-MessageBox -Title (Get-Translation -Key 'RestoreBackupRestoredTitle') -Message $warningMessage -Icon Warning
2026-05-08 21:19:52 +02:00
}
elseif ($successMessage) {
Write-Host "$successMessage"
Show-MessageBox -Title (Get-Translation -Key 'RestoreBackupRestoredTitle') -Message $successMessage -Icon Success
2026-05-08 21:19:52 +02:00
}
return $restoreResult
2026-05-08 21:19:52 +02:00
}
catch {
$errorMessage = if ($_.Exception.Message) { $_.Exception.Message } else { Get-Translation -Key 'RestoreUnexpectedError' }
2026-05-08 21:19:52 +02:00
Write-Error "Restore operation failed: $errorMessage"
Show-MessageBox -Title (Get-Translation -Key 'ErrorTitle') -Message (Get-Translation -Key 'RestoreOperationFailedMessage' -FormatArgs @($errorMessage)) -Icon Error
return [PSCustomObject]@{
RestoredRegistry = $false
RestoredStartMenu = $false
}
2026-05-08 21:19:52 +02:00
}
}