mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-10-07 22:16:43 +00:00
Credit to @jmolinap2 for their work in #643, which was used as inspiration.
116 lines
4.8 KiB
PowerShell
116 lines
4.8 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Shows the backup-restore dialog and performs the selected restore.
|
|
#>
|
|
function Show-RestoreBackupWindow {
|
|
param(
|
|
[System.Windows.Window]$Owner = $null
|
|
)
|
|
|
|
try {
|
|
Write-Host 'Opening restore backup dialog.'
|
|
|
|
$restoreResult = [PSCustomObject]@{
|
|
RestoredRegistry = $false
|
|
RestoredStartMenu = $false
|
|
}
|
|
|
|
$dialogResult = Show-RestoreBackupDialog -Owner $Owner
|
|
if (-not $dialogResult -or $dialogResult.Result -eq 'Cancel') {
|
|
Write-Host 'Restore canceled by user.'
|
|
return $restoreResult
|
|
}
|
|
|
|
$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'
|
|
}
|
|
}
|
|
}
|
|
elseif ($dialogResult.Result -eq 'Restore-StartMenu') {
|
|
$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
|
|
}
|
|
else {
|
|
Restore-StartMenu -BackupFilePath $backupFilePath
|
|
}
|
|
|
|
$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))
|
|
}
|
|
|
|
if ($failedEntries.Count -gt 0) {
|
|
$failureSummary = ($failedEntries | ForEach-Object { $_.Message }) -join [Environment]::NewLine
|
|
$warningMessage = Get-Translation -Key 'RestoreStartMenuPartialSuccessMessage' -FormatArgs @($successCount, $failureSummary)
|
|
}
|
|
else {
|
|
if ($script:Params.ContainsKey("WhatIf")) {
|
|
$successMessage = Get-Translation -Key 'RestoreStartMenuWhatIfMessage'
|
|
}
|
|
elseif ($scope -eq 'AllUsers') {
|
|
$successMessage = Get-Translation -Key 'RestoreStartMenuAllUsersSuccessMessage'
|
|
}
|
|
else {
|
|
$successMessage = Get-Translation -Key 'RestoreStartMenuCurrentUserSuccessMessage'
|
|
}
|
|
}
|
|
|
|
$restoreResult.RestoredStartMenu = $true
|
|
}
|
|
|
|
if ($warningMessage) {
|
|
Write-Host "$warningMessage"
|
|
Show-MessageBox -Title (Get-Translation -Key 'RestoreBackupRestoredTitle') -Message $warningMessage -Icon Warning
|
|
}
|
|
elseif ($successMessage) {
|
|
Write-Host "$successMessage"
|
|
Show-MessageBox -Title (Get-Translation -Key 'RestoreBackupRestoredTitle') -Message $successMessage -Icon Success
|
|
}
|
|
|
|
return $restoreResult
|
|
}
|
|
catch {
|
|
$errorMessage = if ($_.Exception.Message) { $_.Exception.Message } else { Get-Translation -Key 'RestoreUnexpectedError' }
|
|
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
|
|
}
|
|
}
|
|
}
|