Automating WinGet Path Fixes and Package Upgrades on Windows with PowerShell
Managing software on Windows has become incredibly efficient thanks to WinGet, Microsoft’s Windows Package Manager. However, users sometimes face issues where the winget
command isn’t recognized due to missing or incorrect path configurations. At Lazarev Cloud, we’ve developed a simple PowerShell script that fixes these path issues automatically and upgrades all your installed software.
In this article, we’ll guide you through using this script, which you can either download or simply paste directly into your Admin PowerShell to get started.
Common WinGet Issues
Sometimes, WinGet isn’t recognized because:
The
winget.exe
path isn’t added to your system’s environment variables.The system registry doesn’t have the correct path for WinGet, making it inaccessible system-wide.
Without proper configuration, you won’t be able to use WinGet commands for software management.
Solution: A PowerShell Script to Fix Everything
Our solution is a PowerShell script that:
Adds the WinGet path to both the system environment variables and registry if it’s missing.
Automatically upgrades all your installed packages using WinGet.
You can either download the script from Lazarev Cloud GitHub or paste the code directly into your PowerShell.
How to Use the Script
Option 1: Paste the Code Directly into Admin PowerShell
If you want to get started quickly without downloading anything, you can paste the code below directly into your Admin PowerShell:
function Add-WinGetPath {
$WinGetPath = (Get-ChildItem -Path "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller*_x64*\winget.exe").DirectoryName
if (-Not($WinGetPath)) {
Write-Host "WinGet installation not found. Please ensure it's installed." -ForegroundColor Red
return
}
if (-Not (($Env:Path -split ';') -contains $WinGetPath)) {
$env:Path += ";" + $WinGetPath + ";"
Write-Host "WinGet path $WinGetPath added to the current session environment variable." -ForegroundColor Green
} else {
Write-Host "WinGet path already exists in the current session environment variable." -ForegroundColor Yellow
}
}
function Add-WinGetPath-Registry {
$WinGetPath = (Get-ChildItem -Path "$env:ProgramFiles\WindowsApps\Microsoft.DesktopAppInstaller*_x64*\winget.exe").DirectoryName
if (-Not($WinGetPath)) {
Write-Host "WinGet installation not found. Please ensure it's installed." -ForegroundColor Red
return
}
$registryPath = 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment'
$oldPath = (Get-ItemProperty -Path $registryPath -Name 'Path').Path
if (-Not (($oldPath -split ';') -contains $WinGetPath))) {
$newPath = $oldPath + ';' + $WinGetPath
Set-ItemProperty -Path $registryPath -Name 'Path' -Value $newPath
[Environment]::SetEnvironmentVariable('Path', $newPath, [EnvironmentVariableTarget]::Machine)
Write-Host "WinGet path $WinGetPath added to the registry and system-wide environment variable." -ForegroundColor Green
} else {
Write-Host "WinGet path already exists in the registry." -ForegroundColor Yellow
}
}
function Upgrade-WinGetPackages {
Write-Host "Upgrading all WinGet packages..."
winget upgrade --all --include-unknown --accept-package-agreements --disable-interactivity
if ($?) {
Write-Host "All packages upgraded successfully." -ForegroundColor Green
} else {
Write-Host "Failed to upgrade some packages." -ForegroundColor Red
}
}
function Fix-WinGetPath {
Write-Host "Checking and fixing WinGet path issues..."
Add-WinGetPath
Add-WinGetPath-Registry
Write-Host "WinGet path check and update completed." -ForegroundColor Cyan
Upgrade-WinGetPackages
}
# Run the path fix and upgrade functions
Fix-WinGetPath
Instructions:
Run PowerShell as Administrator:
Right-click the Start menu.
Select Windows PowerShell (Admin) or Windows Terminal (Admin).
Paste the Script:
Simply copy and paste the code above into your PowerShell window.Press Enter:
After pasting, press Enter to execute the script. The script will:Fix any missing WinGet paths in your system environment and registry.
Automatically upgrade all installed packages using
winget
.
Option 2: Download and Run the Script
You can also download the script directly from Lazarev Cloud GitHub:
Download WinGet Fix Script
Once downloaded, follow these steps to run the script:
Open PowerShell as Administrator.
Navigate to the folder where the script is saved:
cd path\to\script
Run the script:
.\winget.ps1
What the Script Does
Adds WinGet Path to Current Session:
If the path towinget.exe
is missing in the current session’s environment variables, the script will add it.Adds WinGet Path to System Registry:
It checks the system-widePATH
stored in the registry and adds the WinGet path if it’s not already there.Upgrades All Installed Packages:
The script runs thewinget upgrade --all
command to update all your installed applications.
Benefits of Using This Script
Fully Automated: Fixes path issues and upgrades all software in one run.
Fast and Reliable: No need for manual path editing or package-by-package upgrades.
Customizable: You can modify the script to fit your organization’s or personal needs.
Instant Results: Start using WinGet immediately after running the script.
Conclusion
At Lazarev Cloud, we believe in simplifying complex tasks with automation. Whether you’re a power user or managing multiple systems, this WinGet path-fixing and upgrade script will save you time and ensure that your system is always up to date.
Simply paste the code directly into PowerShell or download it from GitHub, and let the script handle the rest!
Get the script from GitHub:
Lazarev Cloud GitHub - WinGet Script
For more helpful scripts and automation tips, follow the Lazarev Cloud Blog or reach out to our support for any questions!
Subscribe to my newsletter
Read articles from Till Lazarev directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by