mirror of
https://github.com/ChrisTitusTech/winutil
synced 2026-04-06 06:38:31 +00:00
Zeus-toggle-fix (#4017)
* Fix Get Installed toggle detection and multiple config bugs Fixes the issue where "Get Installed" in the Tweaks tab was not correctly pulling all toggle states, plus several additional config bugs discovered during investigation. Changes: - Unified toggle detection logic using Get-WinUtilToggleStatus - Fixed registry value detection (0 values were incorrectly treated as missing) - Added DefaultState support for missing registry keys - Fixed WPFTweaksUTC registry type (QWord → DWord) - Fixed WPFTweaksServices startup types (TermService, VaultSvc: Automatic → Manual) - Fixed duplicate order collisions in tweaks - Fixed FFmpeg display name - Improved OneDrive removal script reliability - Improved Copilot removal script with wildcard pattern and null check - Fixed code formatting (added spaces after if/Foreach statements) Files changed: - functions/private/Invoke-WinUtilCurrentSystem.ps1 - functions/private/Get-WinUtilToggleStatus.ps1 - config/tweaks.json - config/applications.json Fixes #3762 Fixes #3189 Fixes #3876 Potentially fixes #3008 Potentially fixes #3815 * Fix toggles --------- Co-authored-by: Akhil Achanta <akhilachanta8@gmail.com>
This commit is contained in:
@@ -555,7 +555,7 @@
|
||||
"ffmpeg": {
|
||||
"category": "Utilities",
|
||||
"choco": "na",
|
||||
"content": "eibol.FFmpegBatchAVConverter",
|
||||
"content": "FFmpeg Batch AV Converter",
|
||||
"description": "FFmpeg Batch AV Converter is a universal audio and video encoder, that allows to use the full potential of ffmpeg command line with a few mouse clicks in a convenient GUI with drag and drop, progress information.",
|
||||
"link": "https://ffmpeg-batch.sourceforge.io/",
|
||||
"winget": "eibol.FFmpegBatchAVConverter"
|
||||
|
||||
@@ -665,7 +665,7 @@
|
||||
},
|
||||
{
|
||||
"Name": "TermService",
|
||||
"StartupType": "Automatic",
|
||||
"StartupType": "Manual",
|
||||
"OriginalType": "Manual"
|
||||
},
|
||||
{
|
||||
@@ -725,7 +725,7 @@
|
||||
},
|
||||
{
|
||||
"Name": "VaultSvc",
|
||||
"StartupType": "Automatic",
|
||||
"StartupType": "Manual",
|
||||
"OriginalType": "Manual"
|
||||
},
|
||||
{
|
||||
@@ -2043,11 +2043,12 @@
|
||||
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
||||
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
||||
|
||||
$Appx = (Get-AppxPackage MicrosoftWindows.Client.CoreAI).PackageFullName
|
||||
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
||||
|
||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
||||
Remove-AppxPackage $Appx
|
||||
$Appx = (Get-AppxPackage *MicrosoftWindows.Client.CoreAI*).PackageFullName
|
||||
if ($Appx) {
|
||||
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
||||
Remove-AppxPackage $Appx
|
||||
}
|
||||
"
|
||||
],
|
||||
"UndoScript": [
|
||||
|
||||
@@ -45,7 +45,7 @@ Function Get-WinUtilToggleStatus {
|
||||
} else {
|
||||
Write-Debug "$($regentry.Name) is false (state: $regstate, value: $($regentry.Value), original: $($regentry.OriginalValue))"
|
||||
}
|
||||
if (!$regstate) {
|
||||
if ($null -eq $regstate) {
|
||||
switch ($regentry.DefaultState) {
|
||||
"true" {
|
||||
$regstate = $regentry.Value
|
||||
|
||||
@@ -41,47 +41,73 @@ Function Invoke-WinUtilCurrentSystem {
|
||||
}
|
||||
}
|
||||
|
||||
if($CheckBox -eq "tweaks") {
|
||||
if ($CheckBox -eq "tweaks") {
|
||||
|
||||
if(!(Test-Path 'HKU:\')) {$null = (New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS)}
|
||||
if (!(Test-Path 'HKU:\')) {$null = (New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS)}
|
||||
$ScheduledTasks = Get-ScheduledTask
|
||||
|
||||
$sync.configs.tweaks | Get-Member -MemberType NoteProperty | ForEach-Object {
|
||||
|
||||
$Config = $psitem.Name
|
||||
#WPFEssTweaksTele
|
||||
$registryKeys = $sync.configs.tweaks.$Config.registry
|
||||
$scheduledtaskKeys = $sync.configs.tweaks.$Config.scheduledtask
|
||||
$serviceKeys = $sync.configs.tweaks.$Config.service
|
||||
$entry = $sync.configs.tweaks.$Config
|
||||
$registryKeys = $entry.registry
|
||||
$scheduledtaskKeys = $entry.scheduledtask
|
||||
$serviceKeys = $entry.service
|
||||
$appxKeys = $entry.appx
|
||||
$invokeScript = $entry.InvokeScript
|
||||
$entryType = $entry.Type
|
||||
|
||||
if($registryKeys -or $scheduledtaskKeys -or $serviceKeys) {
|
||||
if ($registryKeys -or $scheduledtaskKeys -or $serviceKeys) {
|
||||
$Values = @()
|
||||
|
||||
if ($entryType -eq "Toggle") {
|
||||
if (-not (Get-WinUtilToggleStatus $Config)) {
|
||||
$values += $False
|
||||
}
|
||||
} else {
|
||||
$registryMatchCount = 0
|
||||
$registryTotal = 0
|
||||
|
||||
Foreach ($tweaks in $registryKeys) {
|
||||
Foreach($tweak in $tweaks) {
|
||||
Foreach ($tweaks in $registryKeys) {
|
||||
Foreach ($tweak in $tweaks) {
|
||||
$registryTotal++
|
||||
$regstate = $null
|
||||
|
||||
if(test-path $tweak.Path) {
|
||||
$actualValue = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name)
|
||||
$expectedValue = $tweak.Value
|
||||
if ($expectedValue -eq "<RemoveEntry>") {
|
||||
if ($null -ne $actualValue) {
|
||||
$values += $False
|
||||
}
|
||||
} elseif ($expectedValue -notlike $actualValue) {
|
||||
$values += $False
|
||||
if (Test-Path $tweak.Path) {
|
||||
$regstate = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name)
|
||||
}
|
||||
|
||||
if ($null -eq $regstate) {
|
||||
switch ($tweak.DefaultState) {
|
||||
"true" {
|
||||
$regstate = $tweak.Value
|
||||
}
|
||||
"false" {
|
||||
$regstate = $tweak.OriginalValue
|
||||
}
|
||||
default {
|
||||
$regstate = $tweak.OriginalValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($regstate -eq $tweak.Value) {
|
||||
$registryMatchCount++
|
||||
}
|
||||
} else {
|
||||
$values += $False
|
||||
}
|
||||
}
|
||||
|
||||
if ($registryTotal -gt 0 -and $registryMatchCount -ne $registryTotal) {
|
||||
$values += $False
|
||||
}
|
||||
}
|
||||
|
||||
Foreach ($tweaks in $scheduledtaskKeys) {
|
||||
Foreach($tweak in $tweaks) {
|
||||
Foreach ($tweak in $tweaks) {
|
||||
$task = $ScheduledTasks | Where-Object {$($psitem.TaskPath + $psitem.TaskName) -like "\$($tweak.name)"}
|
||||
|
||||
if($task) {
|
||||
if ($task) {
|
||||
$actualValue = $task.State
|
||||
$expectedValue = $tweak.State
|
||||
if ($expectedValue -ne $actualValue) {
|
||||
@@ -92,10 +118,10 @@ Function Invoke-WinUtilCurrentSystem {
|
||||
}
|
||||
|
||||
Foreach ($tweaks in $serviceKeys) {
|
||||
Foreach($tweak in $tweaks) {
|
||||
Foreach ($tweak in $tweaks) {
|
||||
$Service = Get-Service -Name $tweak.Name
|
||||
|
||||
if($Service) {
|
||||
if ($Service) {
|
||||
$actualValue = $Service.StartType
|
||||
$expectedValue = $tweak.StartupType
|
||||
if ($expectedValue -ne $actualValue) {
|
||||
@@ -105,9 +131,13 @@ Function Invoke-WinUtilCurrentSystem {
|
||||
}
|
||||
}
|
||||
|
||||
if($values -notcontains $false) {
|
||||
if ($values -notcontains $false) {
|
||||
Write-Output $Config
|
||||
}
|
||||
} else {
|
||||
if ($invokeScript -or $appxKeys) {
|
||||
Write-Debug "Skipping $Config in Get Installed: no detectable registry, scheduled task, or service state."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user