Well, here's a simple install script to get you up and running in one go. You will need to run it from the built-in Windows Powershell v5.x, running as admin (not from Powershell 7.x pwsh).
You can copy the script directly to the console, or save it as Install_apps.ps1 and run it like that.
Feel free to comment (add # before the line) or uncomment any app you like.
# Note1: To check which apps are already installed, type:
You can simulate actions without installing anything by setting
# Note2: If you decide to run it as a PS1 script file, make sure to add an ampersand & or .\ before the path to the file, like in the screenshot below. Powershell requires one of these to execute the script.
# Note3: Apps have new version releases every now and then. winget updates take around 12 hours to propagate through Github and MS Store, meaning you might see (or get notified) that an app has a new version released, but when you check with
# Note4: If you get the error "install_apps.ps1 cannot be loaded because running scripts is disabled on this system", type:
# To check, type:
# Note5: If it says that "winget" is not recognized as a command, the simplest solution is to open the MS Store and update "App Installer".
# Note6: I've added code to capture failed installations with a summery at the end.
# Note7: Some apps are known to fail with the message "This app can't run on your PC".
If you encounter such apps, just use other ways to install them (own installer, MS Store).
winget listYou can simulate actions without installing anything by setting
$DryRun to $true.
# Note2: If you decide to run it as a PS1 script file, make sure to add an ampersand & or .\ before the path to the file, like in the screenshot below. Powershell requires one of these to execute the script.
# Note3: Apps have new version releases every now and then. winget updates take around 12 hours to propagate through Github and MS Store, meaning you might see (or get notified) that an app has a new version released, but when you check with
winget upgrade, you don't see the update immediately. Just wait a while longer and the new version will appear.
# Note4: If you get the error "install_apps.ps1 cannot be loaded because running scripts is disabled on this system", type:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force # To check, type:
Get-ExecutionPolicy
# Note5: If it says that "winget" is not recognized as a command, the simplest solution is to open the MS Store and update "App Installer".
# Note6: I've added code to capture failed installations with a summery at the end.
# Note7: Some apps are known to fail with the message "This app can't run on your PC".
If you encounter such apps, just use other ways to install them (own installer, MS Store).

# Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
$DryRun = $false
# $false = real installs. $true = simulate actions without installing anything
if (-not $DryRun) {
winget upgrade | Out-Null
winget source update | Out-Null
winget install --id Microsoft.AppInstaller --accept-source-agreements --accept-package-agreements
}
$IDs = @(
"Microsoft.DotNet.DesktopRuntime.8" # winget can only install the OS arch variant [BURN EXE x64]
"Microsoft.DotNet.DesktopRuntime.9" # winget can only install the OS arch variant [BURN EXE x64]
"Microsoft.DotNet.DesktopRuntime.10" # winget can only install the OS arch variant [BURN EXE x64]
<# You can download the 32bit variants from: https://dotnet.microsoft.com/en-us/download/dotnet
To check which ones you have installed, type in powershell:
echo "x86:`n" ; dotnet --list-runtimes --arch x86 ; echo "x64:" ; dotnet --list-runtimes --arch x64
#>
"Microsoft.VCRedist.2015+.x64" # MS Visual C++ 2015-2022 Redist x64 [BURN EXE x64]
# "Microsoft.Powertoys" # Some useful add-ons from Microsoft [BURN EXE x64]
# "AnyDesk.AnyDesk" # Remote connection (Similar to TeamViewer) [EXE]
# "Open-Shell.Open-Shell-Menu" # Open-Shell - Windows Start menu alternative [EXE]
# "XPDDT99J9GKB5C" # Samsung Magician SSD Toolkit [EXE]
# "Microsoft.Office" # Microsoft 365 Apps for enterprise [EXE]
# "RustDesk.RustDesk" # Remote connection (Similar to TeamViewer) [EXE X64]
# "RARLab.WinRAR" # WinRAR archive manager (not free) (alternative to 7-Zip) [EXE x64]
# "7zip.7zip" # 7-Zip free archive manager (❌ FAILS) [EXE x64]
# FAIL REASON: App already installed by own installer or MS Store
# Better to install 7-Zip myfreeer with NSIS decompile
# "Anthropic.Claude" # Claude LLM AI Gen [EXE X64]
# "Adobe.Acrobat.Reader.64-bit" # Acrobat PDF Reader x64 [EXE X64]
# "eloston.ungoogled-chromium" # unGoogled Chromium Web Browser [EXE x64]
"Microsoft.WindowsAppRuntime.1.7" # Prerequisite for many apps [EXE x64]
"Microsoft.WindowsAppRuntime.1.8" # Prerequisite for many apps [EXE x64]
"Microsoft.VCLibs.Desktop.14" # MS Visual C++ 2015 Desktop v14.x for classic win32 apps (❌ FAILS)
# FAIL REASON: App preinstalled as system component or by MS Store
"Microsoft.VCLibs.14" # MS Visual C++ 2015 v14.x for modern UWP apps [MSIX ZIP]
"Microsoft.UI.Xaml.2.8" # Prerequisite for many apps (❌ FAILS) [MSIX APPX x64]
# FAIL REASON: App preinstalled as system component or by MS Store
"Microsoft.OpenJDK.25" # Microsoft's Java Runtime Environment
"LesFerch.WinSetView" # WinSetView - Customize Windows Explorer Details view columns [INNO EXE]
# "Kingston.SSDManager" # Kingston SSD Manager Toolkit [INNO EXE]
# "Ollama.Ollama" # Ollama LLM AI Gen [INNO EXE]
# "ONLYOFFICE.DesktopEditors" # ONLYOFFICE (alternative to MS Office) [INNO EXE]
# "Google.Antigravity" # Similar to VisualStudioCode IDE [INNO EXE x64]
# "VSCodium.VSCodium" # Similar to VisualStudioCode IDE [INNO EXE x64]
# "Giorgiotani.Peazip" # Peazip free archive manager (alternative to 7-Zip) [INNO EXE x64]
"Meltytech.Shotcut" # Shotcut Video editor NLE [INNO EXE X64]
"clsid2.mpc-hc" # MPC-HC Media Player [INNO EXE x64]
# "Git.Git" ## --source winget [INNO EXE]
"Telegram.TelegramDesktop" # Telegram app [INNO EXE x64]
"Microsoft.VisualStudioCode" # VS Code IDE for compiling and running scripts [INNO EXE x64]
"Buanzo.FFmpegforAudacity" # FFmpeg for Audacity [INNO EXE x64]
# "MPC-BE.MPC-BE" # MPC-BE Media Player (Black Edition) [INNO ZIP x64]
# "Zoom.Zoom" # Zoom Workspace meeting app. For system-wide, add --scope machine [MSI x64]
# "Microsoft.Edge" # Microsoft Edge Web Browser (comes pre-installed) (❌ FAILS) [MSI x64]
# FAIL REASON: App preinstalled as system component or by MS Store
# "TheDocumentFoundation.LibreOffice" # Libre Office (alternative to MS Office) [MSI x64]
"Microsoft.WindowsTerminal" # Windows Terminal [MSIX MSIXBUNDLE]
# "M2Team.NanaZip" # NanaZip free archive manager (alternative to 7-Zip) [MSIX MSIXBUNDLE]
"Microsoft.PowerShell" # Powershell 7.x [WIX MSI X64]
# "Microsoft.WSL" # Windows Subsystem for Linux [WIX MSI x64]
# "Genymobile.scrcpy" # Mirror and control ADB Android devices (includes adb.exe)
"Google.Chrome" # Google Chrome Web Browser [WIX MSI x64]
# "Mozilla.Firefox" # Firefox Web Browser (en-US). Another ID: 9NZVDKPMR9RD [NSIS EXE x64]
"Mozilla.Firefox.MSIX" # Firefox Web Browser [MSIX x64]
"Microsoft.Teams" # Microsoft Teams - Communication & collaboration app [MSI X64]
"Notepad++.Notepad++" # Notepad++ free text editor (❌ FAILS) [NSIS EXE x64]
# FAIL REASON: App running or already installed by own installer / MS Store
# "CudaText.CudaText" # Alternative to Notepad++ (get latest from website) [PORTABLE ZIP x64]
"Gyan.FFmpeg" # ffmpeg - command-line media encoder/decoder [PORTABLE ZIP]
"Audacity.Audacity" # Audacity - Free Audio Sound editor [INNO EXE x64]
"FlorianHeidenreich.Mp3tag" # Media Music file tag metadata editor
# "VideoLAN.VLC" # VLC media player [NSIS EXE x64]
# "CyberTimon.RapidRAW" # Free alternative to Adobe LightRoom [WIX MSI x64]
# "WACUP.WACUP" # Winamp Music Player [NSIS EXE x86]
# The 64bit is available here: https://getwacup.com/preview_x64/
# "9WZDNCRFJ3TJ" # Netflix app [MSSTORE]
# "9MZNG5HZWZ1T" # Intel® Rapid Storage Technology (RST) [MSSTORE]
# "9P8K5G2MWW6Z" # Intel® Graphics Software [MSSTORE]
# "9PLFNLNT3G5G" # Intel® Graphics Command Center [MSSTORE]
# "9N0866FS04W8" # Dolby Access [MSSTORE]
# "9PJ0NKL8MCSJ" # DTS Sound Unbound [MSSTORE]
# "9MVZQVXJBQ9V" # MS AV1 Video Extension [MSSTORE]
# "9NM4T8B9JQZ1" # Apple TV [MSSTORE]
"9NKSQGP7F2NH" # Whatsapp app [MSSTORE]
"9NBLGGH5L9XT" # Instagram app [MSSTORE]
"9N5LW3JBCXKF" # MSIX Packaging Tool [MSSTORE]
# Logitech.OptionsPlus # Logitech Options+ app for keyboard/mouse
# "Valve.Steam" # Steam game library platform distro [NSIS EXE]
"NirSoft.WirelessNetworkWatcher" # Wireless Network Watcher [NSIS EXE]
"4gray.iptvnator" # iptvnator m3u8 IPTV channels player [NSIS EXE]
# "Google.AndroidStudio" # Google Android Studio (includes adb.exe) [NSIS EXE]
# "darktable.darktable" # Free alternative to Adobe LightRoom [NSIS EXE x64]
"qBittorrent.qBittorrent" # qBittorrent client [NSIS EXE x64]
"HermannSchinagl.LinkShellExtension" # Link Shell Extension (identify junctions, hard links, symlinks)
# "OBSProject.OBSStudio" # OBS Studio - Free video recorder capturer [NSIS EXE X64]
"activescott.lessmsi" # Extract MSI files [PORTABLE ZIP]
"NirSoft.FullEventLogView" # Full EventLog View [PORTABLE ZIP x64]
"NirSoft.ManageWirelessNetworks" # Options > Show Wireless Keys [PORTABLE ZIP]
# "NirSoft.MobileFileSearch" # Search files inside a mobile device connected via USB MTP
"Fastfetch-cli.Fastfetch" # Fastfetch - Display system specs in console [PORTABLE ZIP]
# "TeamViewer.TeamViewer" # TeamViewer Remote connection app [WIX ZIP]
# "TeamViewer.TeamViewer.Host" # TeamViewer Remote connection (host only) [WIX ZIP]
# (❌ FAILS) If one is installed, the other will fail.
# "EpicGames.EpicGamesLauncher" # Epic Games library platform distro [WIX MSI]
# "Alibaba.Qwen" # Qwen LLM AI Gen [NSIS EXE]
# "Anthropic.ClaudeCode" # Claude Code LLM [PORTABLE EXE X64]
"yt-dlp.yt-dlp" # CLI media downloader [PORTABLE EXE X64]
# "CPUID.CPU-Z" # CPU-Z processor info [INNO EXE]
# "TechPowerUp.GPU-Z" # GPU-Z Graphics card info [EXE]
# "Comfy.ComfyUI-Desktop" # desktop app for ComfyUI [NSIS EXE]
"Henry++.simplewall" # Free fireall. Check for a newer version. Should be last [NSIS EXE]
)
# ---------------------
# Map AppIDs to their executable process names (without .exe)
# used to kill apps before updating to prevent file locks.
$ProcessMap = @{
"Notepad++.Notepad++" = "notepad++"
"7zip.7zip" = "7zFM"
"Microsoft.Edge" = "msedge"
"Google.Chrome" = "chrome"
"Mozilla.Firefox" = "firefox"
"Microsoft.PowerShell" = "pwsh"
"Microsoft.WindowsTerminal" = "WindowsTerminal"
}
# ---------------------
# Ensure we are running as Admin
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).`
IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "This script requires Administrator privileges."
Write-Warning "Please right-click the script and select 'Run as Administrator'."
Break
}
# Resolve full path to winget.exe - important for Powershell 5.x
$Winget = (Get-Command winget -ErrorAction SilentlyContinue).Source
if (-not $Winget) { $Winget = "$env:LOCALAPPDATA\Microsoft\WindowsApps\winget.exe" }
# Cache for package sizes to avoid repeated GitHub/S3 requests
$PkgSizeCache = @{}
# Cache for installer URLs to avoid repeated winget show calls
$InstallerUrlCache = @{}
Write-Host "Scanning currently installed packages..." -ForegroundColor Cyan
$InstalledList = & $Winget list | Out-String
# function Is-Installed { param($Id) ; return $InstalledList -match $Id }
function Stop-RunningApp {
param($Id)
if ($ProcessMap.ContainsKey($Id)) {
$exe = $ProcessMap[$Id]
$proc = Get-Process -Name $exe -ErrorAction SilentlyContinue
if ($proc) {
Write-Host " Closing running process: $exe" -ForegroundColor Yellow
$proc | Stop-Process -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
}
}
}
$Results = @()
Write-Host "Starting sequential installs...`n" -ForegroundColor Cyan
$drawLine = { Write-Host ("=" * 50) -ForegroundColor DarkGray } # Draw a Line
function Get-InstallerUrl {
param($Id)
if ($InstallerUrlCache.ContainsKey($Id)) { return $InstallerUrlCache[$Id] }
$info = & $Winget "show" $Id "--verbose" "--accept-source-agreements" 2>$null
if (-not $info) { $InstallerUrlCache[$Id] = $null ; return $null }
$urlLine = $info | Select-String -Pattern "Installer Url"
if (-not $urlLine) { $InstallerUrlCache[$Id] = $null ; return $null }
$url = ($urlLine -replace ".*Installer Url:\s*", "").Trim()
$InstallerUrlCache[$Id] = $url
return $url
}
function Get-PkgSizeCurl {
param($Id, $Url)
if ($PkgSizeCache.ContainsKey($Id)) { return $PkgSizeCache[$Id] }
if (-not $Url) { $PkgSizeCache[$Id] = $null ; return $null }
try {
$headers = curl -I -L $Url 2>$null
$locations = $headers | Select-String -Pattern "^Location:"
if ($locations) { $finalUrl = ($locations[-1] -replace "^Location:\s*", "").Trim() }
else { $finalUrl = $Url }
$finalHeaders = curl -I $finalUrl 2>$null
$lenLine = $finalHeaders | Select-String -Pattern "Content-Length"
if (-not $lenLine) { $PkgSizeCache[$Id] = $null ; return $null }
$bytes = ($lenLine -replace ".*Content-Length:\s*", "") -as [double]
if ($bytes -le 0) { $PkgSizeCache[$Id] = $null ; return $null }
$size = [math]::Round($bytes / 1MB, 2).ToString() + " MB"
$PkgSizeCache[$Id] = $size
return $size
}
catch {
$PkgSizeCache[$Id] = $null
return $null
}
}
foreach ($pkg in $IDs) {
if (-not $DryRun) { Stop-RunningApp $pkg }
<# CoPilot style - uses function Is-Installed
if (Is-Installed $pkg) {
Write-Host "Upgrading $pkg ..." -ForegroundColor Cyan
& $Winget upgrade --id $pkg --silent --accept-package-agreements `
--accept-source-agreements --disable-interactivity --force
} else {
Write-Host "Installing $pkg ..." -ForegroundColor Yellow
& $Winget install --id $pkg --silent --accept-package-agreements `
--accept-source-agreements --disable-interactivity --force
} #>
# Gemini style - direct without function
Write-Host "Processing $pkg ..." -ForegroundColor Yellow
if ($DryRun) { Write-Host " - DRY RUN MODE ACTIVE (no changes will be made)" -ForegroundColor Magenta }
# Get installer URL (cached)
$InstallerUrl = Get-InstallerUrl $pkg
# Get package size (cached)
$PkgSize = Get-PkgSizeCurl $pkg $InstallerUrl
if ($PkgSize) {
Write-Host " - Package size: $PkgSize" -ForegroundColor DarkCyan
} else {
Write-Host " - Package size: (unknown)" -ForegroundColor DarkGray
}
if ($InstalledList -match [regex]::Escape($pkg)) {
$CommandMode = "upgrade"
Write-Host " - App already installed. Attempting UPGRADE." -ForegroundColor Gray
} else {
$CommandMode = "install"
Write-Host " - New app. Attempting FRESH INSTALL." -ForegroundColor Gray
}
if ($DryRun) {
Write-Host " - DRY RUN: Would run: winget $CommandMode --id $pkg" -ForegroundColor Magenta
$exit = 0 # treat as success
}
else {
& $Winget $CommandMode --id $pkg --silent --accept-package-agreements `
--accept-source-agreements --disable-interactivity --force
$exit = $LASTEXITCODE
}
# 0 = Success. -1978335189 = "No update available" (Safe to ignore for upgrades)
$Status = "Failed"
if ($exit -eq 0) { $Status = "Success" ; Write-Host "`n Result: Success" -ForegroundColor Green }
elseif ($exit -eq -1978335189 -and $CommandMode -eq "upgrade") {
$Status = "Skipped (Up to date)"
Write-Host "`n Result: App is already up to date." -ForegroundColor Green
$exit = 0 # Treat as success for the summary
}
else {
Write-Host "`n Result: Failed (Exit code: $exit)" -ForegroundColor Red
}
$Results += [PSCustomObject]@{
Package = $pkg
Size = $PkgSize
Action = $CommandMode
Result = $Status
ExitCode = $exit
}
& $drawLine
}
& $drawLine
Write-Host " Installation Summary"
& $drawLine
# Show Results summary table
$Results | Sort-Object Action, Package | Select-Object Package, Size, Action, Result | ft -AutoSize
# Filter for failures
$Failed = $Results | Where-Object { $_.ExitCode -ne 0 }
if ($Failed.Count -eq 0) {
Write-Host "All apps installed successfully. Operation complete." -ForegroundColor Green
} else {
Write-Host "The following apps FAILED to install/upgrade:" -ForegroundColor Red
foreach ($f in $Failed) {
Write-Host " - $($f.Package) (Exit Code: $($f.ExitCode))" -ForegroundColor Red
}
}
# This comment is just to make sure there is another line after the curly bracket