If you work in Windows and like to have everything controlled from the command line, WinGet is your ally for installing, updating, and managing applications without having to navigate through downloads or graphical wizards. This package manager, created by Microsoft, simplifies everything from clean system deployments to daily maintenance.
Beyond basic installation, WinGet shines thanks to its integration with the Microsoft Store, its support for external repositories, and its automation options with YAML files and the PowerShell module. Below you'll find a complete and practical guide to installing it, using it effectively, understanding its commands, fine-tuning its security in an enterprise environment, and getting the most out of it on Windows 10, Windows 11, and Windows Server 2025.
What is WinGet and what systems is it available on?
WinGet (Windows Package Manager) is the command-line interface for the Windows Package Manager service. It allows you to discover, install, update, configure, and uninstall software on Windows 10, Windows 11, and Windows Server 2025 , integrating with the App Installer component that Microsoft distributes and updates through the Microsoft Store on Windows desktops and via updates on Windows Server 2025.
Compared to previous third-party solutions like Chocolatey or Scoop, WinGet offers Microsoft's official channel with catalogs from the Store and a community repository , as well as the ability to add private sources. Its philosophy is reminiscent of managers like apt or dnf in GNU/Linux and Homebrew in macOS, bringing automation and reproducibility to Windows in application management.
Install WinGet (stable and pre-release versions)

In current equipment, WinGet usually comes already installed as part of App InstallerTo check, open PowerShell or Command Prompt and type winget; if you see help and version, you already have it. If it doesn't appear, install App Installer from the Microsoft Store and that will automatically enable WinGet.
If you want to try newer features, there are several ways to get preview versions of the client: download the preview package from GitHub to install it manually (you won't receive automatic updates from the Store), join the Windows Insider Program (Canary or Dev) with a Microsoft, work, school, or AAD account to receive previews via the Store, or sign up with your MSA to the Windows Package Manager Insider program so that the Microsoft Store delivers new preview builds as soon as they are available.
Installing WinGet in Windows Sandbox
Windows Sandbox is an isolated, ephemeral desktop environment. This sandbox doesn't include WinGet or the Microsoft Store app , so you'll need to bootstrap it. You can download the latest package from GitHub or use PowerShell with the appropriate cmdlet to repair and install the WinGet components.
For the path supported via PowerShell, run the following in the Sandbox (you can open PowerShell as a standard user in the isolated environment): the process installs the client module and repairs the Package Manager for all users in the environment.
$progressPreference = 'silentlyContinue'
Write-Host "Installing WinGet PowerShell module from PSGallery..."
Install-PackageProvider -Name NuGet -Force | Out-Null
Install-Module -Name Microsoft.WinGet.Client -Force -Repository PSGallery | Out-Null
Write-Host "Using Repair-WinGetPackageManager cmdlet to bootstrap WinGet..."
Repair-WinGetPackageManager -AllUsers
Write-Host "Done."
If you prefer, install the system-wide module with -Scope AllUsers en Install-Module. To test a preview add -IncludePrerelease to the cmdlet Repair-WinGetPackageManager. And if you need detailed help, query the parameters with Get-Help Repair-WinGetPackageManager -Full in the Sandbox itself.
Permissions and Elevation: Considerations for Administrators
The experience may vary depending on whether you run commands with or without elevated privileges. If you launch WinGet without administrator privileges , some installers will require User Account Control (UAC) to elevate themselves; if you cancel the prompt, that application will not install. However, if you open the console "as administrator," the installers will not request elevation (since you already have it), so exercise extreme caution and only install trusted software.
In corporate environments, combining WinGet with group policies and Intune allows you to enforce security policies, control sources, and automate configuration, while maintaining a frictionless experience for the end user.
Getting Started: Search, Installation, and Help
To get started, open PowerShell, Terminal, or CMD and type winget; You will see version, commands and optionsA typical flow is to locate a package and then install it using its name or identifier.
Search for applications with winget search <nombre>. When you confirm which is the correct package, install with winget install <paquete>. For example, for Visual Studio Code: winget install Microsoft.VisualStudioCodeThe client will manage the download and installer.
To see complete help for the tool and each command, uses winget --help o winget <comando> --help. If something isn't working and you suspect a routing problem, Check that the client is correctly in PATH, since some users experience it failing for that reason.
The most useful WinGet commands
The Windows Package Manager client includes a wide collection of subcommands. Here are the most important ones and their purpose so you know when to use each one:
- install: Installs the specified package.
- Show: shows package details.
- source: Adds, removes, and updates sources (repositories) accessed by WinGet.
- search: Search for applications in the configured sources.
- list: Lists installed software that WinGet recognizes.
- upgrade: Update a specific app or all of them with
--all. - uninstall: uninstalls the specified package.
- hash: Generates the SHA256 hash of an installer for verification.
- validate: Validates a manifest before submitting it to the repository.
- settings: opens the configuration file (settings.json).
- Features: shows the status of experimental functions.
- export: Exports the list of installed packages to a file.
- import: Installs all packages defined in an exported file.
- pine: Manages version “pins” to prevent unwanted updates.
- configure: Applies configuration files to bring the system to a desired state.
- download: Downloads the package installer without installing it yet.
- repair: Attempts to repair the selected application.
- dscv3: Commands related to PowerShell Desired State Configuration v3 resources.
A practical note: the ability to update with upgrade has been expanded; Previously limited to apps installed with WinGet, it can now detect and update more software it identifies on your system.
Global options worth knowing about
In addition to subcommands, WinGet has general options that modify its behavior on any given run. Some of the most useful are:
- -v, –version: Displays the client version.
- –Info: Details system information, license, privacy, and applied policies.
- -?, –help: client or subcommand help.
- –wait: wait for a key before exiting.
- –logs, –open-logs: opens the default logs folder.
- –verbose, –verbose-logs: Enables verbose logging.
- –nowarn, –ignore-warnings: suppress warnings.
- –disable-interactivity: runs without interactive prompts.
- –proxy: Defines a temporary proxy for that execution.
- –no-proxy: forces not to use proxy on that run.
With these flags you can, for example, mute interactivity for automated scripts , enable traces if you are debugging a bug, or force a specific proxy during an installation.
Supported installer formats

WinGet is flexible with installer types. It supports EXE (Silent and SilentWithProgress switches), ZIP, INNO, NULLSOFT, MSI, WIX, APPX, MSIX, BURN, and PORTABLE . This allows it to cover everything from classic installers to modern Microsoft Store packages.
The variety of formats means that, depending on the package, the installation experience may vary (for example, more or less silent, or with steps specific to the manufacturer). Even so, WinGet standardizes the invocation and monitoring of the process.
Automation with configuration files and scripting
One of the strong points is in the Automation with YAML configuration files to bring a computer to a desired state with a single command: winget configure --file ruta/winget.yaml. These files use PowerShell DSC v3 (Desired State Configuration) along with WinGet resources and packages.
YAML is divided into two main areas: Assertions, where you declare prerequisites (e.g., minimum operating system version), and Resources, where you list packages, dependencies, scripts, and configurations.
A simplified example might include packages like Microsoft.VisualStudioCode and Google.Chrome with the latest version, and a script block to adjust execution policies or install PowerShell modules. Additionally, you can force the package's source (Store or repository) and chain dependencies ( dependsOn ).
If you prefer pure PowerShell, the Microsoft.WinGet.Client module is available in the PowerShell Gallery. With it, you gain native cmdlets and can integrate WinGet into deployment scripts, CI/CD, or scheduled tasks.
Manage sources and add repositories
By default, WinGet uses the Microsoft Store and the community repository . You can extend the catalog with additional REST sources, such as a private one from your organization or cloud-hosted or on-premises solutions.
To add a new font, run: winget source add --name <nombre> --arg <URL>. Optionally defines --type (REST by default), --trust-level (none o Trusted) and --accept-source-agreements to accept terms without prompts.
Check the sources with winget source list. There are projects that simplify repository hosting, and even commercial options like WinGetty with Docker deployment for local environments. This flexibility is key for companies with internal catalogs or specific compliance requirements.
Advanced settings: settings.json and experimental features
To fine-tune customer behavior, open settings with winget settings and edits settings. json. Here you can adjust origins, telemetry behavior, experimental features, and more. If you're interested in exploring the experimental, check your status with winget features.
User-level customization makes it easier, for example, to force certain silent installation options or to modulate how repositories interact when there are homonymous packages between the Store and the community.
Logging, debugging, and sending packages
When something goes wrong, WinGet has logs and traces. You can open the logs folder with --open-logs or increase verbosity with --verbose-logsThe debugging documentation describes where to look and how to interpret common errors.
If you miss an app in the catalog, Contribute by submitting a package to the community repository. Before uploading, validate the manifest with winget validate to avoid automatic rejections. This way, you'll help more users access that software directly from WinGet.
Open source project and how to contribute
The client is open source and lives on GitHub: https://github.com/microsoft/winget-cli/. The code is compiled with Visual Studio 2022, the solution is in C++ inside the folder src, and the repository includes scripts in .github to prepare the environment.
If you'd like to contribute, sign the Microsoft CLA and submit your changes from a branch of your fork . The repository maintains lists of common issues and recommended solutions that will be useful for both contributing and diagnosing production problems.
Use cases: developers, ISVs, and enterprises
For developers, WinGet streamlines setting up repeatable work environments : open Windows Terminal , PowerShell, or CMD, and with just a few commands, your tools are ready. Plus, the Windows command-line blog and introductory videos demonstrate real-world workflows.
ISVs can use WinGet as additional distribution channelThey send manifestos to the Microsoft Community Manifest Repository on GitHub for your installers .msix, .msi o .exe are analyzed and validated, both automatically and with manual reviews where appropriate.
In enterprise environments, the client integrates seamlessly with Intune and Group Policy to standardize deployments, keep software up-to-date, and ensure compliance. The " msstore " origin and certificate pinning protect communications with the Store, reducing the risk of man-in-the-middle (MITM) attacks.
Enterprise Security: Certificate Pinning and GPOs
For connections to the Microsoft Store, WinGet validates the certificate by pinning. On networks with SSL inspection, this pinning can cause errors if a firewall intercepts the traffic. For these cases, there is the directive BypassCertificatePinningForMicrosoftStore.
The options for this GPO are: Unconfigured (recommended for inheriting default values), Enable (bypasses pinning validation), or Disable (requires the certificate to match those in the Microsoft Store). Disabling pinning carries risks because it opens the door to man-in-the-middle (MITM) attacks ; avoid doing so unless absolutely necessary and under controlled conditions.
More Group Policies for Windows Package Manager
With each version of Windows 11 , specific ADMX/ADML templates for the Windows Package Manager are released , divided into categories such as source control, local development, and execution policies.
To install them, download the DesktopAppInstallerPolicies.zip From the releases from Windows Package Manager on GitHub, extract and copy the .admx to C:\Windows\PolicyDefinitions and the .adml of your language to the corresponding subdirectory (for example, en-US o es-ES). Then open the Group Policy Management Console (GPMC) and configure policies according to your needs.
As usual, each new version may add configurations . It's advisable to review and update these templates periodically to keep the environment aligned with WinGet's current capabilities.
Practical examples of use
Installing a specific app is as simple as run winget install <paquete>. Examples: winget install Google.Chrome, winget install Microsoft.VisualStudioCode o winget install Mozilla.Firefox; in all cases, the client will download and launch the installer, and may ask you UAC confirmation if you are not elevating.
To keep the software up to date, check for updates with winget upgrade and apply all with winget upgrade --all. Keep in mind that if an application is open, its update can be skipped until you close it.
If you want to prepare a clean reinstallation of the system, export your catalog with winget list > lista.txt, identify the IDs you need and build a single command with all your apps (for example: winget install discord.discord gimp.gimp microsoft.powertoys valve.steam) to reinstall them in one go.
Can't remember the exact name of a package? Search with winget search notepad and check for matches, sources (Store or repository) and specific IDs that will be useful during installation or when setting versions.
Complementary tools and GUI
Although the console is straightforward and powerful, there are utilities that make it easier for less experienced users . Winstall (winstall.app) allows you to create scripts for batch installations similar to Ninite, and portals like winget.run list commands ready to copy.
If you prefer a desktop graphical interface, frontends like UnitGetUI have emerged , offering catalog browsing, multi-installation, and visual management on top of the WinGet engine. They are useful for users who want the power of a package manager without leaving a user interface.
When you combine the official Microsoft Store distribution, the community repository, and the ability to add private sources, WinGet becomes a comprehensive solution for installing, maintaining, and auditing software on Windows.
Its commands cover the entire lifecycle (install, update, uninstall, export/import), global options provide fine-grained control for scripting and debugging, and policy integration allows organizations to secure their workflows without sacrificing agility. Furthermore, by leveraging YAML files with DSC v3 and the PowerShell module, you'll have repeatable and reliable deployments in just a few steps. Share this guide so more people can learn about WinGet.
