noid-privacy/Modules/Privacy/Private/Set-TelemetrySettings.ps1

54 lines
2.4 KiB
PowerShell
Raw Normal View History

function Set-TelemetrySettings {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[PSCustomObject]$Config
)
try {
Write-Log -Level INFO -Message "Applying telemetry settings ($($Config.Mode) mode)..." -Module "Privacy"
# Debug: Check if DataCollection exists
if (-not $Config.DataCollection) {
Write-Log -Level ERROR -Message "DataCollection is NULL or empty in config!" -Module "Privacy"
Write-Log -Level DEBUG -Message "Config properties: $($Config.PSObject.Properties.Name -join ', ')" -Module "Privacy"
return $false
}
$keyCount = @($Config.DataCollection.PSObject.Properties.Name).Count
Write-Log -Level DEBUG -Message "DataCollection has $keyCount registry keys to process" -Module "Privacy"
foreach ($keyPath in $Config.DataCollection.PSObject.Properties.Name) {
$key = $keyPath
$values = $Config.DataCollection.$keyPath
if (!(Test-Path $key)) {
New-Item -Path $key -Force | Out-Null
Write-Log -Level INFO -Message "Created registry key: $key" -Module "Privacy"
}
foreach ($valueName in $values.PSObject.Properties.Name) {
$valueData = $values.$valueName
$existing = Get-ItemProperty -Path $key -Name $valueName -ErrorAction SilentlyContinue
if ($null -ne $existing) {
Set-ItemProperty -Path $key -Name $valueName -Value $valueData.Value -Force | Out-Null
} else {
$propType = switch ($valueData.Type) {
"DWord" { "DWord" }
"String" { "String" }
default { "DWord" }
}
New-ItemProperty -Path $key -Name $valueName -Value $valueData.Value -PropertyType $propType -Force | Out-Null
}
Write-Log -Level INFO -Message "Set $key\$valueName = $($valueData.Value) ($($valueData.Description))" -Module "Privacy"
}
}
Write-Log -Level SUCCESS -Message "Telemetry settings applied successfully" -Module "Privacy"
return $true
} catch {
Write-Log -Level ERROR -Message "Failed to apply telemetry settings: $_" -Module "Privacy"
return $false
}
}