mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2026-03-12 17:51:46 +08:00
Fix Get Installed toggle detection and multiple config bugs (#3959)
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
This commit is contained in:
committed by
GitHub
parent
e68e190ff3
commit
414cd139e2
@@ -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"
|
||||
},
|
||||
{
|
||||
@@ -1632,7 +1632,7 @@
|
||||
{
|
||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
|
||||
"Name": "RealTimeIsUniversal",
|
||||
"Type": "QWord",
|
||||
"Type": "DWord",
|
||||
"Value": "1",
|
||||
"OriginalValue": "0"
|
||||
}
|
||||
@@ -1655,12 +1655,16 @@
|
||||
|
||||
# Some of OneDrive files use explorer, and OneDrive uses FileCoAuth
|
||||
Write-Host \"Removing leftover OneDrive Files...\"
|
||||
Stop-Process -Name FileCoAuth,Explorer
|
||||
Remove-Item \"$Env:LocalAppData\\Microsoft\\OneDrive\" -Recurse -Force
|
||||
Remove-Item \"C:\\ProgramData\\Microsoft OneDrive\" -Recurse -Force
|
||||
Stop-Process -Name FileCoAuth -ErrorAction SilentlyContinue
|
||||
Remove-Item \"$Env:LocalAppData\\Microsoft\\OneDrive\" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item \"C:\\ProgramData\\Microsoft OneDrive\" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
# Grant back permission to accses OneDrive folder
|
||||
icacls $Env:OneDrive /grant \"Administrators:(D,DC)\"
|
||||
# Restart Explorer
|
||||
Start-Process explorer.exe
|
||||
|
||||
# Reset and grant full control permissions to OneDrive folder
|
||||
icacls $Env:OneDrive /reset
|
||||
icacls $Env:OneDrive /grant \"Administrators:(F)\"
|
||||
"
|
||||
],
|
||||
"UndoScript": [
|
||||
@@ -1676,7 +1680,7 @@
|
||||
"Description": "Removes the Home from Explorer and sets This PC as default",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a029_",
|
||||
"Order": "a029a_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\"
|
||||
@@ -1696,7 +1700,7 @@
|
||||
"Description": "Removes the Gallery from Explorer and sets This PC as default",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a029_",
|
||||
"Order": "a030_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
|
||||
@@ -2043,11 +2047,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