Installing software by downloading installers in a browser over RDP is slow, and hard to repeat. Package managers let you install, upgrade and script software on Windows Server from PowerShell, just like apt on Linux. The two main options are Microsoft’s winget and the community-driven Chocolatey.
winget vs Chocolatey
| winget (Windows Package Manager) | Chocolatey | |
|---|---|---|
| Maintained by | Microsoft | Chocolatey Software + community |
| Availability on Server | Windows Server 2025 includes it; earlier versions need manual install | Installs on Windows Server 2016+ |
| Package source | Official manifests pointing to vendor installers | Community repository (packages often wrap vendor installers) |
| Server Core | Limited | Works |
| Business features | — | Paid editions: internal repos, package builder, reporting |
Many admins use winget where available, and Chocolatey on older servers, or for packages winget lacks.
winget
Check whether it’s available:
winget --version
On Windows Server 2025 (Desktop Experience) it’s included. On 2019/2022, it can be installed manually (the App Installer package with its dependencies). Follow Microsoft’s current instructions, because this changes between versions.
Common commands:
winget search notepad++
winget install --id Notepad++.Notepad++ -e --accept-package-agreements --accept-source-agreements
winget install --id Git.Git -e
winget install --id Python.Python.3.12 -e
winget list
winget upgrade --all
-e (exact match) with --id avoids installing the wrong package.
Chocolatey
Install it (in an elevated PowerShell). Review the script first, as with any download-and-run installer:
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Common commands:
choco search 7zip
choco install 7zip git googlechrome notepadplusplus -y
choco list
choco upgrade all -y
choco uninstall googlechrome -y
Script a server build
Keep a list of packages, and apply it to every new server:
$apps = 'Git.Git','7zip.7zip','Notepad++.Notepad++','Microsoft.PowerShell','WinSCP.WinSCP'
foreach ($a in $apps) { winget install --id $a -e --silent --accept-package-agreements --accept-source-agreements }
Combine this with Windows features (Install-WindowsFeature) and configuration scripts, and you can rebuild a server quickly after a reinstall. See reinstall the OS and PowerShell basics.
Keep software updated
Schedule a weekly upgrade with Task Scheduler (winget upgrade --all --silent or choco upgrade all -y), during a maintenance window. Test critical applications (trading platforms, databases) before upgrading them automatically, or exclude them (choco pin add -n=<package>). See Windows scheduled tasks with PowerShell.
Windows itself still updates through Windows Update. See Windows Update with PowerShell.
Security tips
- Prefer official vendor packages (winget manifests point to vendor URLs, and Chocolatey marks verified and approved packages).
- Check the package’s source and maintainer before installing on production servers.
- For businesses, host an internal repository with vetted packages instead of pulling directly from public sources.
- Don’t install desktop tools you don’t need on a server. Every app is something to patch.
Troubleshooting
- “winget is not recognized”: it isn’t installed, or isn’t on the PATH for that user. On older Windows Server versions, follow Microsoft’s manual installation steps, or use Chocolatey.
- Installs hang: some installers wait for input. Use the silent switches (
--silentfor winget,-yfor Chocolatey), and check whether the package supports unattended installs. - TLS errors downloading packages: old servers may need TLS 1.2 enabled for .NET downloads (the Chocolatey install line above sets it for the session).
- App installed for one user only: some winget packages install per user. Use
--scope machinewhere supported, so every RDP user gets the app.
Quick reference
| Task | winget | Chocolatey |
|---|---|---|
| Search | winget search x |
choco search x |
| Install | winget install --id X -e |
choco install x -y |
| List | winget list |
choco list |
| Upgrade all | winget upgrade --all |
choco upgrade all -y |
| Remove | winget uninstall --id X |
choco uninstall x -y |
Related: Windows Server initial setup and Windows VPS.