mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-05-18 11:46:18 +00:00
Starting from this commit, Win11Debloat will automatically create a registry backup every time the script is run. This registry backup can be used to revert any registry changes made by the script.
89 lines
3.8 KiB
PowerShell
89 lines
3.8 KiB
PowerShell
function Show-RestoreBackupWindow {
|
|
param(
|
|
[Parameter(Mandatory = $false)]
|
|
[System.Windows.Window]$Owner = $null
|
|
)
|
|
|
|
try {
|
|
Write-Host 'Opening restore backup dialog.'
|
|
|
|
$dialogResult = Show-RestoreBackupDialog -Owner $Owner
|
|
if (-not $dialogResult -or $dialogResult.Result -eq 'Cancel') {
|
|
Write-Host 'Restore canceled by user.'
|
|
return
|
|
}
|
|
|
|
$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)."
|
|
Restore-RegistryBackupState -Backup $backup
|
|
$successMessage = 'Registry backup restored successfully.'
|
|
}
|
|
elseif ($dialogResult.Result -eq 'RestoreStartMenu') {
|
|
$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') {
|
|
RestoreStartMenuForAllUsers -BackupFilePath $backupFilePath
|
|
}
|
|
else {
|
|
RestoreStartMenu -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 "Failed to restore the Start Menu backup.`n$errorSummary"
|
|
}
|
|
|
|
if ($failedEntries.Count -gt 0) {
|
|
$failureSummary = ($failedEntries | ForEach-Object { $_.Message }) -join [Environment]::NewLine
|
|
$warningMessage = "The Start Menu backup was successfully restored for $successCount user(s).`nSome users could not be restored:`n$failureSummary"
|
|
}
|
|
else {
|
|
if ($scope -eq 'AllUsers') {
|
|
$successMessage = "The Start Menu backup was successfully restored for all users. The changes will apply the next time users sign in."
|
|
}
|
|
else {
|
|
$successMessage = "The Start Menu backup was successfully restored for the current user. The changes will apply the next time you sign in."
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($warningMessage) {
|
|
Write-Host "$warningMessage"
|
|
Show-MessageBox -Title 'Backup Restored' -Message $warningMessage -Icon Warning
|
|
}
|
|
elseif ($successMessage) {
|
|
Write-Host "$successMessage"
|
|
Show-MessageBox -Title 'Backup Restored' -Message $successMessage -Icon Success
|
|
}
|
|
}
|
|
catch {
|
|
$errorMessage = if ($_.Exception.Message) { $_.Exception.Message } else { 'An unexpected error occurred.' }
|
|
Write-Error "Restore operation failed: $errorMessage"
|
|
Show-MessageBox -Title 'Error' -Message "Restore failed: $errorMessage" -Icon Error
|
|
}
|
|
}
|