mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-05-18 11:46:18 +00:00
89 lines
3.0 KiB
PowerShell
89 lines
3.0 KiB
PowerShell
|
|
function New-RegistrySettingsBackup {
|
||
|
|
param(
|
||
|
|
[string[]]$ActionableKeys
|
||
|
|
)
|
||
|
|
|
||
|
|
$ActionableKeys = @($ActionableKeys)
|
||
|
|
$selectedFeatures = Get-SelectedFeatures -ActionableKeys $ActionableKeys
|
||
|
|
if (@($selectedFeatures | Where-Object { -not [string]::IsNullOrWhiteSpace([string]$_.RegistryKey) }).Count -eq 0) {
|
||
|
|
return $null
|
||
|
|
}
|
||
|
|
|
||
|
|
$timestamp = Get-Date
|
||
|
|
$backupDirectory = $script:RegistryBackupsPath
|
||
|
|
if (-not (Test-Path $backupDirectory)) {
|
||
|
|
New-Item -ItemType Directory -Path $backupDirectory -Force | Out-Null
|
||
|
|
}
|
||
|
|
|
||
|
|
$backupFileName = 'Win11Debloat-RegistryBackup-{0}.json' -f $timestamp.ToString('yyyyMMdd_HHmmss')
|
||
|
|
$backupFilePath = Join-Path $backupDirectory $backupFileName
|
||
|
|
|
||
|
|
$backupConfig = Get-RegistryBackupPayload -SelectedFeatures $selectedFeatures -CreatedAt $timestamp
|
||
|
|
if (-not (SaveToFile -Config $backupConfig -FilePath $backupFilePath -MaxDepth 25)) {
|
||
|
|
throw "Failed to save registry backup to '$backupFilePath'"
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "Backup successfully created: $backupFilePath"
|
||
|
|
Write-Host ""
|
||
|
|
|
||
|
|
return $backupFilePath
|
||
|
|
}
|
||
|
|
|
||
|
|
function Get-SelectedFeatures {
|
||
|
|
param(
|
||
|
|
[string[]]$ActionableKeys
|
||
|
|
)
|
||
|
|
|
||
|
|
$selectedFeatures = New-Object System.Collections.Generic.List[object]
|
||
|
|
$selectedFeatureIds = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase)
|
||
|
|
|
||
|
|
foreach ($paramKey in $ActionableKeys) {
|
||
|
|
if (-not $script:Features.ContainsKey($paramKey)) { continue }
|
||
|
|
|
||
|
|
$feature = $script:Features[$paramKey]
|
||
|
|
if (-not $feature) { continue }
|
||
|
|
|
||
|
|
$featureId = Get-FeatureId -Feature $feature
|
||
|
|
|
||
|
|
if ($selectedFeatureIds.Add($featureId)) {
|
||
|
|
$selectedFeatures.Add($feature)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return @($selectedFeatures.ToArray())
|
||
|
|
}
|
||
|
|
|
||
|
|
function Get-RegistryBackupPayload {
|
||
|
|
param(
|
||
|
|
[Parameter(Mandatory)]
|
||
|
|
[object[]]$SelectedFeatures,
|
||
|
|
[Parameter(Mandatory)]
|
||
|
|
[datetime]$CreatedAt
|
||
|
|
)
|
||
|
|
|
||
|
|
$selectedFeatureIds = New-Object System.Collections.Generic.List[string]
|
||
|
|
$seenSelectedFeatureIds = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase)
|
||
|
|
foreach ($feature in $SelectedFeatures) {
|
||
|
|
$featureId = Get-FeatureId -Feature $feature
|
||
|
|
|
||
|
|
if ($seenSelectedFeatureIds.Add($featureId)) {
|
||
|
|
$selectedFeatureIds.Add($featureId)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$selectedRegistryFeatures = Get-RegistryBackedFeatures -Features $SelectedFeatures
|
||
|
|
$capturePlans = Get-RegistryBackupCapturePlans -SelectedRegistryFeatures $SelectedRegistryFeatures
|
||
|
|
$registryKeys = @(Get-RegistrySnapshotsForBackup -CapturePlans $capturePlans)
|
||
|
|
|
||
|
|
return @{
|
||
|
|
Version = '1.0'
|
||
|
|
BackupType = 'RegistryState'
|
||
|
|
CreatedAt = $CreatedAt.ToString('o')
|
||
|
|
CreatedBy = 'Win11Debloat'
|
||
|
|
Target = (Get-RegistryBackupTargetDescription)
|
||
|
|
ComputerName = $env:COMPUTERNAME
|
||
|
|
SelectedFeatures = @($selectedFeatureIds)
|
||
|
|
RegistryKeys = @($registryKeys)
|
||
|
|
}
|
||
|
|
}
|