mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-06-11 11:06:27 +00:00
Add ValueKind validation and fix string unescaping in Convert-RegValueData
This commit is contained in:
@@ -1,6 +1,22 @@
|
|||||||
# Tests whether the registry operations in a feature's .reg file currently match the live registry.
|
# Tests whether the registry operations in a feature's .reg file currently match the live registry.
|
||||||
# Returns $true if ALL operations in the apply reg file match current system state.
|
# Returns $true if ALL operations in the apply reg file match current system state.
|
||||||
# Returns $false if the feature has no RegistryKey, the file is missing, or any operation mismatches.
|
# Returns $false if the feature has no RegistryKey, the file is missing, or any operation mismatches.
|
||||||
|
function Get-ExpectedRegistryValueKind {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
$Operation
|
||||||
|
)
|
||||||
|
|
||||||
|
switch ([string]$Operation.ValueType) {
|
||||||
|
'DWord' { return [Microsoft.Win32.RegistryValueKind]::DWord }
|
||||||
|
'String' { return [Microsoft.Win32.RegistryValueKind]::String }
|
||||||
|
'Binary' { return [Microsoft.Win32.RegistryValueKind]::Binary }
|
||||||
|
'Hex2' { return [Microsoft.Win32.RegistryValueKind]::ExpandString }
|
||||||
|
'Hex7' { return [Microsoft.Win32.RegistryValueKind]::MultiString }
|
||||||
|
default { return $null }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function Test-FeatureApplied {
|
function Test-FeatureApplied {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -73,6 +89,8 @@ function Test-FeatureApplied {
|
|||||||
if (-not ($names -icontains $op.ValueName)) { return $false }
|
if (-not ($names -icontains $op.ValueName)) { return $false }
|
||||||
|
|
||||||
$actualKind = $key.GetValueKind($op.ValueName)
|
$actualKind = $key.GetValueKind($op.ValueName)
|
||||||
|
$expectedKind = Get-ExpectedRegistryValueKind -Operation $op
|
||||||
|
if ($null -eq $expectedKind -or $actualKind -ne $expectedKind) { return $false }
|
||||||
$actualRaw = $key.GetValue($op.ValueName, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
|
$actualRaw = $key.GetValue($op.ValueName, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
|
||||||
|
|
||||||
$actual = switch ($actualKind) {
|
$actual = switch ($actualKind) {
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ function Convert-RegValueData {
|
|||||||
if ($valueData -match '^"(?<value>.*)"$') {
|
if ($valueData -match '^"(?<value>.*)"$') {
|
||||||
$stringValue = $matches.value
|
$stringValue = $matches.value
|
||||||
# Unescape registry string escape sequences
|
# Unescape registry string escape sequences
|
||||||
$stringValue = $stringValue -replace '\\\\', '\' -replace '\"', '"'
|
$stringValue = $stringValue -replace '\\"', '"' -replace '\\\\', '\'
|
||||||
return [PSCustomObject]@{
|
return [PSCustomObject]@{
|
||||||
OperationType = 'SetValue'
|
OperationType = 'SetValue'
|
||||||
ValueType = 'String'
|
ValueType = 'String'
|
||||||
|
|||||||
Reference in New Issue
Block a user