Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@
## Checklist
- [ ] My code adheres to the coding and style guidelines of the project.
- [ ] I have commented my code, particularly in hard-to-understand areas.
- [ ] I have made corresponding changes to the documentation.
- [ ] I have made corresponding changes to the documentation.
6 changes: 3 additions & 3 deletions .github/workflows/label-pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
script: |
const prBody = context.payload.pull_request.body || '';
const labelsToAdd = [];
if (/\[x\]\s*New feature/i.test(prBody)) {
labelsToAdd.push('new feature');
}
Expand All @@ -34,12 +34,12 @@ jobs:
if (/\[x\]\s*UI\/UX improvement/i.test(prBody)) {
labelsToAdd.push('ui update');
}
if (labelsToAdd.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: labelsToAdd
});
}
}
2 changes: 1 addition & 1 deletion config/applications.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
15 changes: 8 additions & 7 deletions config/tweaks.json
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,7 @@
},
{
"Name": "TermService",
"StartupType": "Automatic",
"StartupType": "Manual",
"OriginalType": "Manual"
},
{
Expand Down Expand Up @@ -725,7 +725,7 @@
},
{
"Name": "VaultSvc",
"StartupType": "Automatic",
"StartupType": "Manual",
"OriginalType": "Manual"
},
{
Expand Down Expand Up @@ -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": [
Expand Down
4 changes: 2 additions & 2 deletions docs/content/dev/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -546,5 +546,5 @@ Outputs `winutil.ps1` in the root directory.

---

**Last Updated**: January 2026
**Maintainers**: Chris Titus Tech and contributors
**Last Updated**: January 2026
**Maintainers**: Chris Titus Tech and contributors
2 changes: 1 addition & 1 deletion docs/content/dev/tweaks/Essential-Tweaks/Hibernation.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"powercfg.exe /hibernate on"
],
```

## Registry Changes
Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

Write-Host \"Uninstalling OneDrive...\"
Start-Process 'C:\\Windows\\System32\\OneDriveSetup.exe' -ArgumentList '/uninstall' -Wait

# Some of OneDrive files use explorer, and OneDrive uses FileCoAuth
Write-Host \"Removing leftover OneDrive Files...\"
Stop-Process -Name FileCoAuth,Explorer
Expand Down
2 changes: 1 addition & 1 deletion docs/content/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -297,5 +297,5 @@ Can't find your answer? Try these resources:

---

**Last Updated**: January 2026
**Last Updated**: January 2026
**Found this helpful?** Consider starring the project on [GitHub](https://github.com/ChrisTitusTech/winutil)!
4 changes: 2 additions & 2 deletions docs/content/userguide/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Apply optimizations for performance, privacy, and usability. Choose from preset

Quick fixes for common Windows problems:
- Reset network settings
- Fix Windows Update issues
- Fix Windows Update issues
- Repair system files
- Access legacy Windows panels

Expand Down Expand Up @@ -152,7 +152,7 @@ This User Guide covers everything you need to know:

1. **[Getting Started](getting-started/)** - Installation, first run, basic usage
2. **[Application Store](store/)** - Installing software, using presets
3. **[Tweaks](tweaks/)** - System optimizations and customizations
3. **[Tweaks](tweaks/)** - System optimizations and customizations
4. **[Features & Fixes](features/)** - Troubleshooting tools and utilities
5. **[MicroWin](microwin/)** - Creating custom Windows ISOs
6. **[Updates](updates/)** - Managing Windows Update behavior
Expand Down
2 changes: 1 addition & 1 deletion functions/private/Get-WinUtilToggleStatus.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
80 changes: 55 additions & 25 deletions functions/private/Invoke-WinUtilCurrentSystem.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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

if($registryKeys -or $scheduledtaskKeys -or $serviceKeys) {
$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) {
$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) {
Expand All @@ -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) {
Expand All @@ -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."
}
}
}
}
Expand Down
Loading