Compare commits

...

43 Commits

Author SHA1 Message Date
Chris Titus Tech
63eeab0b19 fix whitespace 2026-01-05 10:18:24 -06:00
Gabi
1b78cd1316 Update-Install-WinUtilWinget.ps1 and remove upgrading winget (#3839)
* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Test-WinUtilPackageManager.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Update Install-WinUtilWinget.ps1

* Change error action to SilentlyContinue for commands

* Fix indentation in Test-WinUtilPackageManager.ps1

---------

Co-authored-by: Gabi <218829269+Gabynun@users.noreply.github.com>
Co-authored-by: Chris Titus <contact@christitus.com>
2026-01-05 16:16:19 -06:00
Chris Titus
a1907f5dee Use Install-WinUtilWinget function instead of choco 2026-01-05 16:09:02 -06:00
Gabi
be415051ca Update tweaks.json (#3860) 2026-01-05 14:42:52 -06:00
ChrisTitusTech
80c15557d4 Deploying to main from @ ChrisTitusTech/winutil@a587bc60c4 🚀 2026-01-01 15:34:31 +00:00
ChrisTitusTech
a587bc60c4 Deploying to main from @ ChrisTitusTech/winutil@c71fad54dc 🚀 2025-12-23 15:35:38 +00:00
Gabi
c71fad54dc Change formating in WPFTweaksRemoveCopilot (#3808) 2025-12-15 10:17:47 -06:00
Gabi
4eb76a9099 Cleanup-WPFTweaksServices (#3806)
* Remove unneccary services from WPFTweaksServices

* Update tweaks.json
2025-12-15 10:16:59 -06:00
Gabi
95d8660b3a Update WPFToggleStartMenuRecommendations (#3805) 2025-12-15 10:16:19 -06:00
ChrisTitusTech
4bd25e62e1 Deploying to main from @ ChrisTitusTech/winutil@da6b105573 🚀 2025-12-15 15:37:23 +00:00
Gabi
da6b105573 Remove Services from WPFTweaksServices (#3732) 2025-12-12 09:00:51 -06:00
Gabi
64022cc08d Remove unneccary ScheduledTasks from WPFTweaksTele (#3764) 2025-12-12 09:00:02 -06:00
Gabi
401f7f384a Remove-WPFTweaksWifi (#3765)
* Remove WPFTweaksWifi From Standart preset

* Remove WPFTweaksWifi
2025-12-12 08:59:29 -06:00
Gabi
e2efb3a483 Update WPFTweaksRemoveCopilot (#3768) 2025-12-12 08:58:59 -06:00
Gabi
4dc0fd6a6e Delete-WPFTweaksRecallOff (#3769)
Co-authored-by: Chris Titus <dfm.titus@gmail.com>
2025-12-12 08:58:01 -06:00
Gabi
f671ad4518 Update-WPFTweaksRazerBlock (#3770)
* Update WPFTweaksRazerBlock's InvokeScript

* Format fix for WPFTweaksRazerBlock

* Update WPFTweaksRazerBlock

* Update WPFTweaksRazerBlock

* Update WPFTweaksRazerBlock

* Better format for WPFTweaksRazerBlock's InvokeScript

* Better format for WPFTweaksRazerBlock's InvokeScript

* Fomat fix on WPFTweaksRazerBlock
2025-12-12 08:55:27 -06:00
Gabi
c2cb00fc68 Remove-WPFTweaksDebloatAdobe (#3771)
* Remove WPFTweaksDebloatAdobe

* Delete functions/public/Invoke-WPFRunAdobeCCCleanerTool.ps1

* Update feature.json

* Update feature.json

* Create Invoke-WPFRunAdobeCCCleanerTool.ps1
2025-12-12 08:48:43 -06:00
Gabi
7503444e2b Rename-WPFTweaksLoc (#3773)
* Rename WPFTweaksLoc

* Rename WPFTweaksLoc
2025-12-12 08:47:35 -06:00
Gabi
80ab6ba005 Description update for WPFTweaksConsumerFeatures (#3774) 2025-12-12 08:47:15 -06:00
Gabi
2e0073af75 Update-WPFTweaksTele (#3775)
* Update WPFTweaksTele's InvokeScript

* Update WPFTweaksTele's InvokeScript
2025-12-12 08:46:54 -06:00
Gabi
3cb0a4b664 Deleted WPFTweaksDisableLMS1 (#3776)
Co-authored-by: Chris Titus <dfm.titus@gmail.com>
2025-12-11 14:33:01 -06:00
Gabi
e9b40ae710 Description Update for WPFTweaksDisableEdge (#3778) 2025-12-11 14:25:32 -06:00
Gabi
408327daec Delete-WPFTweaksStorage (#3779)
* Remove WPFTweaksStorage from Standart Preset

* Remove WPFTweaksStorage

* move to advanced tweaks
2025-12-11 14:22:49 -06:00
Gabi
7f7424406f Rename WPFTweaksDisableWpbtExecution (#3780) 2025-12-11 14:18:04 -06:00
Gabi
ccc44414a2 Rename WPFTweaksDisableipsix (#3782) 2025-12-11 14:09:26 -06:00
Gabi
06ea48dd01 Delete-WPFTweaksRemoveOnedrive (#3785)
* Update tweaks.json

* Update-WPFTweaksRemoveOnedrive

* Update-WPFTweaksRemoveOnedrive

* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Delete WPFTweaksRemoveOnedrive
2025-12-11 14:03:54 -06:00
Gabi
5a6b1ef086 Update-WPFTweaksLaptopHibernation (#3786)
* Update WPFTweaksLaptopHibernation's InvokeScript

* Update WPFTweaksLaptopHibernation's Script
2025-12-11 14:01:16 -06:00
Gabi
aba3d786bc Update applications.json (#3791) 2025-12-11 13:58:41 -06:00
Gabi
7765c1032b Add-WPFTweaksMakeEdgeUninstallable (#3792)
* Add WPFTweaksMakeEdgeUninstallable

* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* formating fix
2025-12-11 13:55:34 -06:00
Gabi
015f1b0709 Replace-System.IO.Directory (#3794)
* Update main.ps1

* Update start.ps1

* Update main.ps1

* Update main.ps1
2025-12-11 13:34:03 -06:00
Gabi
19b6f8abfa Remove-Reg.exe (#3798)
* Update WPFTweaksRemoveHome to use powershell

* Fix WPFTweaksRemoveGallery format

* Format fix for WPFTweaksRemoveHome

* Update tweaks.json

* fix my f up

* Update tweaks.json to use registry modifications

Replaced InvokeScript and UndoScript with registry modifications for removing Home from Explorer and setting This PC as default.

* fix missing comma from twitch chat
2025-12-11 13:13:16 -06:00
ChrisTitusTech
80e872aa60 Deploying to main from @ ChrisTitusTech/winutil@cfaf139a6a 🚀 2025-12-02 15:36:46 +00:00
CodingWonders
cfaf139a6a [Tweaks] Conditionally determine when to use sc and Set-Service (#3761)
* [Tweaks] Conditionally determine when to use sc and Set-Service

* Clean up comments in Set-WinUtilService.ps1

Removed comments explaining the handling of auto delayed start for PWSH 5.

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2025-12-01 14:29:27 -06:00
Chris Titus Tech
becfba603d clean up spacing 2025-12-01 07:49:40 -06:00
makhlwf
2b68976e7b feat(accessibility): add accessibility labels to tweaks ui (#3731) 2025-12-01 13:45:58 -06:00
Gabi
5369d9d99b Add Create Issue (#3729) 2025-12-01 13:41:59 -06:00
Gabi
8b3e1280df Update-WPFTweaksDeBloat (#3709)
* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Added comments to InvokeScript of WPFTweaksDeBloat

* Update tweaks.json

* Update tweaks.json
2025-12-01 13:41:28 -06:00
Alvaro Parker
ce77be324b Add zed to applications (#3734) 2025-12-01 13:31:44 -06:00
Soumyadip Nayak
6168e93d4c Remove deprecated CryptoWalletEnabled policy from Edge debloat tweaks (#3737) 2025-12-01 13:29:59 -06:00
Younes Aassila
d98118e322 Fix #3736 (#3748) 2025-12-01 13:26:21 -06:00
dependabot[bot]
f69f107d9d Bump actions/checkout from 5 to 6 (#3745)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-01 13:20:16 -06:00
Gabi
f3c3613d26 OneDrive Removal Updated, read description (#3659)
* Update tweaks.json

* Update tweaks.json

* Update tweaks.json

* Remove Unneccary -ErrorAction in OneDrive-Removal

* Format fixes for WPFTweaksRemoveOnedrive
2025-12-01 13:18:08 -06:00
Chris Titus Tech
b265675560 Removal of more winget user scope code 2025-11-17 07:37:29 -06:00
19 changed files with 158 additions and 1129 deletions

View File

@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Check if PR was merged
if: github.event.pull_request.merged == true

View File

@@ -13,7 +13,7 @@ jobs:
runs-on: windows-latest
steps:
- name: Checkout Sources
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Compile and Syntaxcheck winutil.ps1
shell: pwsh

View File

@@ -14,7 +14,7 @@ jobs:
CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
steps:
- name: Checkout Repository
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Compile project
shell: pwsh

View File

@@ -11,7 +11,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Check if winutil.ps1 exists
id: check_existence

View File

@@ -11,7 +11,7 @@ jobs:
if: (github.event_name == 'schedule' && github.repository == 'ChrisTitusTech/winutil') || (github.event_name != 'schedule')
steps:
- name: Checkout 🛎️
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Generate Sponsors 💖
uses: JamesIves/github-sponsors-readme-action@v1

View File

@@ -8,7 +8,7 @@ jobs:
name: PS Script Analyzer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: lint
uses: devblackops/github-action-psscriptanalyzer@master
with:
@@ -22,7 +22,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Install Pester
run: |

View File

@@ -35,7 +35,7 @@ irm "https://christitus.com/win" | iex
irm "https://christitus.com/windev" | iex
```
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/)
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/) or [Create Issue](https://github.com/ChrisTitusTech/winutil/issues)
## 🎓 Documentation
@@ -79,7 +79,7 @@ You'll see a new file named `winutil.ps1`, which's created by `Compile.ps1` scri
These are the sponsors that help keep this project alive with monthly contributions.
<!-- sponsors --><a href="https://github.com/markamos"><img src="https:&#x2F;&#x2F;github.com&#x2F;markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https:&#x2F;&#x2F;github.com&#x2F;dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https:&#x2F;&#x2F;github.com&#x2F;mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https:&#x2F;&#x2F;github.com&#x2F;jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https:&#x2F;&#x2F;github.com&#x2F;robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https:&#x2F;&#x2F;github.com&#x2F;KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https:&#x2F;&#x2F;github.com&#x2F;paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https:&#x2F;&#x2F;github.com&#x2F;djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https:&#x2F;&#x2F;github.com&#x2F;anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https:&#x2F;&#x2F;github.com&#x2F;FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https:&#x2F;&#x2F;github.com&#x2F;DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https:&#x2F;&#x2F;github.com&#x2F;realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https:&#x2F;&#x2F;github.com&#x2F;quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https:&#x2F;&#x2F;github.com&#x2F;DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https:&#x2F;&#x2F;github.com&#x2F;KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/novello-dev"><img src="https:&#x2F;&#x2F;github.com&#x2F;novello-dev.png" width="60px" alt="User avatar: João Pedro Novello" /></a><!-- sponsors -->
<!-- sponsors --><a href="https://github.com/markamos"><img src="https:&#x2F;&#x2F;github.com&#x2F;markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https:&#x2F;&#x2F;github.com&#x2F;dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https:&#x2F;&#x2F;github.com&#x2F;mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https:&#x2F;&#x2F;github.com&#x2F;jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https:&#x2F;&#x2F;github.com&#x2F;robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https:&#x2F;&#x2F;github.com&#x2F;KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https:&#x2F;&#x2F;github.com&#x2F;paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https:&#x2F;&#x2F;github.com&#x2F;djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https:&#x2F;&#x2F;github.com&#x2F;anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https:&#x2F;&#x2F;github.com&#x2F;FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https:&#x2F;&#x2F;github.com&#x2F;DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/quaszi"><img src="https:&#x2F;&#x2F;github.com&#x2F;quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https:&#x2F;&#x2F;github.com&#x2F;DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https:&#x2F;&#x2F;github.com&#x2F;KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/TaNorbs"><img src="https:&#x2F;&#x2F;github.com&#x2F;TaNorbs.png" width="60px" alt="User avatar: Norbs" /></a><!-- sponsors -->
## 🏅 Thanks to all Contributors
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.

View File

@@ -1000,6 +1000,14 @@
"link": "https://aws.amazon.com/corretto",
"winget": "Amazon.Corretto.21.JDK"
},
"java25": {
"category": "Development",
"choco": "corretto25jdk",
"content": "Amazon Corretto 25 (LTS)",
"description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
"link": "https://aws.amazon.com/corretto",
"winget": "Amazon.Corretto.25.JDK"
},
"jdownloader": {
"category": "Utilities",
"choco": "jdownloader",
@@ -2927,5 +2935,13 @@
"description": "The modern, privacy-focused, performance-driven browser built on Firefox",
"link": "https://zen-browser.app/",
"winget": "Zen-Team.Zen-Browser"
},
"Zed": {
"category": "Development",
"choco": "na",
"content": "Zed",
"description": "Zed is a modern, high-performance code editor designed from the ground up for speed and collaboration.",
"link": "https://zed.dev/",
"winget": "Zed.Zed"
}
}

View File

@@ -4,11 +4,9 @@
"WPFTweaksConsumerFeatures",
"WPFTweaksDisableExplorerAutoDiscovery",
"WPFTweaksDVR",
"WPFTweaksLoc",
"WPFTweaksLocation",
"WPFTweaksServices",
"WPFTweaksStorage",
"WPFTweaksTele",
"WPFTweaksWifi",
"WPFTweaksDiskCleanup",
"WPFTweaksDeleteTempFiles",
"WPFTweaksEndTaskOnTaskbar",

File diff suppressed because it is too large Load Diff

View File

@@ -2,79 +2,20 @@ function Install-WinUtilWinget {
<#
.SYNOPSIS
Installs Winget if it is not already installed.
Installs Winget if not already installed.
.DESCRIPTION
This function will download the latest version of Winget and install it. If Winget is already installed, it will do nothing.
installs winget if needed
#>
$isWingetInstalled = Test-WinUtilPackageManager -winget
try {
if ($isWingetInstalled -eq "installed") {
Write-Host "`nWinget is already installed.`r" -ForegroundColor Green
return
} elseif ($isWingetInstalled -eq "outdated") {
Write-Host "`nWinget is Outdated. Continuing with install.`r" -ForegroundColor Yellow
} else {
Write-Host "`nWinget is not Installed. Continuing with install.`r" -ForegroundColor Red
}
# Gets the computer's information
if ($null -eq $sync.ComputerInfo) {
$ComputerInfo = Get-ComputerInfo -ErrorAction Stop
} else {
$ComputerInfo = $sync.ComputerInfo
}
if (($ComputerInfo.WindowsVersion) -lt "1809") {
# Checks if Windows Version is too old for Winget
Write-Host "Winget is not supported on this version of Windows (Pre-1809)" -ForegroundColor Red
return
}
Write-Host "Attempting to install/update Winget`r"
try {
$wingetCmd = Get-Command winget -ErrorAction Stop
Write-Information "Attempting to update WinGet using WinGet..."
$result = Start-Process -FilePath "`"$($wingetCmd.Source)`"" -ArgumentList "install -e --accept-source-agreements --accept-package-agreements Microsoft.AppInstaller" -Wait -NoNewWindow -PassThru
if ($result.ExitCode -ne 0) {
throw "WinGet update failed with exit code: $($result.ExitCode)"
}
Write-Output "Refreshing Environment Variables...`n"
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
return
} catch {
Write-Information "WinGet not found or update failed. Attempting to install from Microsoft Store..."
}
try {
Write-Host "Attempting to repair WinGet using Repair-WinGetPackageManager..." -ForegroundColor Yellow
# Check if Windows version supports Repair-WinGetPackageManager (24H2 and above)
if ([System.Environment]::OSVersion.Version.Build -ge 26100) {
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Install-Module "Microsoft.WinGet.Client" -Force
Import-Module Microsoft.WinGet.Client
Repair-WinGetPackageManager -Force -Latest -Verbose
# Verify if repair was successful
$wingetCmd = Get-Command winget -ErrorAction Stop
Write-Host "WinGet repair successful!" -ForegroundColor Green
} else {
Write-Host "Repair-WinGetPackageManager is only available on Windows 24H2 and above. Your version doesn't support this method." -ForegroundColor Yellow
throw "Windows version not supported for repair method"
}
Write-Output "Refreshing Environment Variables...`n"
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
return
} catch {
Write-Error "All installation methods failed. Unable to install WinGet."
throw
}
} catch {
Write-Error "An error occurred during WinGet installation: $_"
throw
if ((Test-WinUtilPackageManager -winget) -eq "installed") {
return
}
Write-Host "Winget is not Installed. Installing." -ForegroundColor Red
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Install-PackageProvider -Name NuGet -Force
Install-Module Microsoft.WinGet.Client -Force
Import-Module Microsoft.WinGet.Client
Repair-WinGetPackageManager
}

View File

@@ -21,10 +21,6 @@ function Invoke-WinUtilTweaks {
$KeepServiceStartup = $true
)
if ($Checkbox -like "*Toggle*") {
$CheckBox = $sync.configs.tweaks.$CheckBox
}
Write-Debug "Tweaks: $($CheckBox)"
if($undo) {
$Values = @{

View File

@@ -24,8 +24,12 @@ Function Set-WinUtilService {
# Check if the service exists
$service = Get-Service -Name $Name -ErrorAction Stop
# Service exists, proceed with changing properties
$service | Set-Service -StartupType $StartupType -ErrorAction Stop
# Service exists, proceed with changing properties -- while handling auto delayed start for PWSH 5
if (($PSVersionTable.PSVersion.Major -lt 7) -and ($StartupType -eq "AutomaticDelayedStart")) {
sc.exe config $Name start=delayed-auto
} else {
$service | Set-Service -StartupType $StartupType -ErrorAction Stop
}
} catch [System.ServiceProcess.ServiceNotFoundException] {
Write-Warning "Service $Name was not found"
} catch {

View File

@@ -17,67 +17,12 @@ function Test-WinUtilPackageManager {
[System.Management.Automation.SwitchParameter]$choco
)
$status = "not-installed"
if ($winget) {
# Check if Winget is available while getting it's Version if it's available
$wingetExists = $true
try {
$wingetInfo = winget --info
# Extract the package version from the output
$wingetVersionFull = ($wingetInfo | Select-String -Pattern 'Microsoft\.DesktopAppInstaller v\d+\.\d+\.\d+\.\d+').Matches.Value
if ($wingetVersionFull) {
$wingetVersionFull = $wingetVersionFull.Split(' ')[-1].TrimStart('v')
} else {
# Fallback in case the pattern isn't found
$wingetVersionFull = ($wingetInfo | Select-String -Pattern 'Package Manager v\d+\.\d+\.\d+').Matches.Value.Split(' ')[-1]
}
} catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] {
Write-Warning "Winget was not found due to un-availability reasons"
$wingetExists = $false
} catch {
Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
$wingetExists = $false
}
# If Winget is available, Parse it's Version and give proper information to Terminal Output.
# If it isn't available, the return of this function will be "not-installed", indicating that
# Winget isn't installed/available on The System.
if ($wingetExists) {
# Check if Preview Version
if ($wingetVersionFull.Contains("-preview")) {
$wingetVersion = $wingetVersionFull.Trim("-preview")
$wingetPreview = $true
} else {
$wingetVersion = $wingetVersionFull
$wingetPreview = $false
}
# Check if Winget's Version is too old.
$wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v'))
# Grabs the latest release of Winget from the GitHub API for version check process.
$response = winget search -e Microsoft.AppInstaller --accept-source-agreements
$wingetLatestVersion = ($response | Select-String -Pattern '\d+\.\d+\.\d+\.\d+').Matches.Value
Write-Host "Latest Search Version: $wingetLatestVersion" -ForegroundColor White
Write-Host "Current Installed Version: $wingetCurrentVersion" -ForegroundColor White
$wingetOutdated = $wingetCurrentVersion -lt [System.Version]::Parse($wingetLatestVersion)
if (Get-Command winget -ErrorAction SilentlyContinue) {
Write-Host "===========================================" -ForegroundColor Green
Write-Host "--- Winget is installed ---" -ForegroundColor Green
Write-Host "===========================================" -ForegroundColor Green
if (!$wingetPreview) {
Write-Host " - Winget is a release version." -ForegroundColor Green
} else {
Write-Host " - Winget is a preview version. Unexpected problems may occur." -ForegroundColor Yellow
}
if (!$wingetOutdated) {
Write-Host " - Winget is Up to Date" -ForegroundColor Green
$status = "installed"
} else {
Write-Host " - Winget is Out of Date" -ForegroundColor Red
$status = "outdated"
}
$status = "installed"
} else {
Write-Host "===========================================" -ForegroundColor Red
Write-Host "--- Winget is not installed ---" -ForegroundColor Red
@@ -87,11 +32,10 @@ function Test-WinUtilPackageManager {
}
if ($choco) {
if ((Get-Command -Name choco -ErrorAction Ignore) -and ($chocoVersion = (Get-Item "$env:ChocolateyInstall\choco.exe" -ErrorAction Ignore).VersionInfo.ProductVersion)) {
if (Get-Command choco -ErrorAction SilentlyContinue) {
Write-Host "===========================================" -ForegroundColor Green
Write-Host "--- Chocolatey is installed ---" -ForegroundColor Green
Write-Host "===========================================" -ForegroundColor Green
Write-Host "Version: v$chocoVersion" -ForegroundColor White
$status = "installed"
} else {
Write-Host "===========================================" -ForegroundColor Red

View File

@@ -10,8 +10,8 @@ function Invoke-WPFFixesWinget {
# Install Choco if not already present
try {
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
Install-WinUtilChoco
Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait
Write-Host "==> Starting Winget Repair"
Install-WinUtilWinget -Force
} catch {
Write-Error "Failed to install winget: $_"
Set-WinUtilTaskbaritem -state "Error" -overlay "warning"

View File

@@ -33,62 +33,6 @@ function Invoke-WPFInstall {
try {
$sync.ProcessRunning = $true
if($packagesWinget.Count -gt 0 -and $packagesWinget -ne "0") {
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
Add-Type -assembly System.Windows.Forms
$PrincipalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext('Machine')
$user = $env:USERNAME
Get-LocalUser | Where-Object Enabled -eq $true | ForEach-Object {
$validPassword = $false
while (-not $validPassword) {
try {
$myPasswordIsBlank = $PrincipalContext.ValidateCredentials($user, $null)
$validPassword = $true
} catch {
$form = New-Object System.Windows.Forms.Form
$form.Text = "Set password for $user"
$form.Size = New-Object System.Drawing.Size(500, 200)
$label = New-Object System.Windows.Forms.Label
$label.Text = 'Admin mode install failed. Set a USER password for login and user-based installation.'
$label.Size = New-Object System.Drawing.Size(480, 60)
$label.Location = New-Object System.Drawing.Point(10, 10)
$form.Controls.Add($label)
$passwordBox = New-Object System.Windows.Forms.TextBox
$passwordBox.Size = New-Object System.Drawing.Size(380, 20)
$passwordBox.UseSystemPasswordChar = $true
$passwordBox.Location = New-Object System.Drawing.Point(10, 125)
$form.Controls.Add($passwordBox)
$button = New-Object System.Windows.Forms.Button
$button.Text = 'Submit'
$button.Size = New-Object System.Drawing.Size(75, 23)
$button.Location = New-Object System.Drawing.Point(400, 125)
$button.Add_Click({
$password = $passwordBox.Text | ConvertTo-SecureString -AsPlainText -Force
if ($password) {
try {
Set-LocalUser -Name $user -Password $password
$validPassword = $PrincipalContext.ValidateCredentials($user, $passwordBox.Text)
if ($validPassword) {
$form.Close()
} else {
[System.Windows.Forms.MessageBox]::Show('Invalid password! Please try again.')
}
} catch {
[System.Windows.Forms.MessageBox]::Show('Error setting password!')
}
} else {
[System.Windows.Forms.MessageBox]::Show('No password entered!')
}
})
$form.Controls.Add($button)
$form.ShowDialog() | Out-Null
}
}
}
Show-WPFInstallAppBusy -text "Installing apps..."
Install-WinUtilWinget
Install-WinUtilProgramWinget -Action Install -Programs $packagesWinget

View File

@@ -156,6 +156,7 @@ function Invoke-WPFUIElements {
$checkBox.Name = $entryInfo.Name
$checkBox.HorizontalAlignment = "Right"
$checkBox.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content)
$dockPanel.Children.Add($checkBox) | Out-Null
$checkBox.Style = $ColorfulToggleSwitchStyle
@@ -191,6 +192,7 @@ function Invoke-WPFUIElements {
$toggleButton.ToolTip = $entryInfo.Description
$toggleButton.HorizontalAlignment = "Left"
$toggleButton.Style = $ToggleButtonStyle
[System.Windows.Automation.AutomationProperties]::SetName($toggleButton, $entryInfo.Content[0])
$toggleButton.Tag = @{
contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" }
@@ -232,6 +234,7 @@ function Invoke-WPFUIElements {
$comboBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
$comboBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
$comboBox.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($comboBox, $entryInfo.Content)
foreach ($comboitem in ($entryInfo.ComboItems -split " ")) {
$comboBoxItem = New-Object Windows.Controls.ComboBoxItem
@@ -273,6 +276,7 @@ function Invoke-WPFUIElements {
$baseWidth = [int]$entryInfo.ButtonWidth
$button.Width = [math]::Max($baseWidth, 350)
}
[System.Windows.Automation.AutomationProperties]::SetName($button, $entryInfo.Content)
$itemsControl.Items.Add($button) | Out-Null
$sync[$entryInfo.Name] = $button
@@ -303,6 +307,7 @@ function Invoke-WPFUIElements {
$radioButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
$radioButton.ToolTip = $entryInfo.Description
$radioButton.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($radioButton, $entryInfo.Content)
if ($entryInfo.Checked -eq $true) {
$radioButton.IsChecked = $true
@@ -324,6 +329,7 @@ function Invoke-WPFUIElements {
$checkBox.ToolTip = $entryInfo.Description
$checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
$checkBox.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content)
if ($entryInfo.Checked -eq $true) {
$checkBox.IsChecked = $entryInfo.Checked
}

View File

@@ -451,13 +451,11 @@ $NavLogoPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size 25)) | Out-N
$winutildir = @{}
# Set the path for the winutil directory
$winutildir["path"] = "$env:LOCALAPPDATA\winutil\"
[System.IO.Directory]::CreateDirectory($winutildir["path"]) | Out-Null
$winutildir = "$env:LocalAppData\winutil\"
New-Item $winutildir -ItemType Directory -Force | Out-Null
$winutildir["logo.ico"] = $winutildir["path"] + "cttlogo.ico"
if (Test-Path $winutildir["logo.ico"]) {
$sync["logorender"] = $winutildir["logo.ico"]
if (Test-Path "$winutildir\logo.ico") {
$sync["logorender"] = "$winutildir\logo.ico"
} else {
$sync["logorender"] = (Invoke-WinUtilAssets -Type "Logo" -Size 90 -Render)
}

View File

@@ -80,7 +80,7 @@ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]:
$dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$logdir = "$env:localappdata\winutil\logs"
[System.IO.Directory]::CreateDirectory("$logdir") | Out-Null
New-Item $logdir -ItemType Directory -Force | Out-Null
Start-Transcript -Path "$logdir\winutil_$dateTime.log" -Append -NoClobber | Out-Null
# Set PowerShell window title