Uma máquina nova com o Windows 11 limpo, e a primeira hora perde-se em instalações manuais na Store e em sites de terceiros. O winget, o cliente de linha de comandos do Windows Package Manager, corta esse passo: pesquisa o catálogo, instala em silêncio, actualiza as aplicações desfasadas e desinstala por ID.

Este guia corre os comandos do dia-a-dia, o par export e import, as definições e as fontes, e a fronteira com o Intune.

💡 TL;DR

O winget mantém o software de uma máquina: install no passo isolado, upgrade --all na fila de actualização, export e import na reposição. Em imposição central, o Intune entra.

1. A fronteira com o Intune

O winget actua por máquina: corre na sessão com direitos de administrador e o resultado sai na consola. As apps Win32 do Intune actuam por frota: o instalador empacota-se na consola, a entrega segue anéis e agenda, e o estado de cada equipamento chega ao portal. Na PME com um técnico, o winget cobre instalação e actualização sem licenças a mais.

Dimensão winget Intune (app Win32)
Escala Máquina a máquina, à mão ou por script local Frota inteira com anéis e agenda central
Rede O instalador desce do catálogo e instala na hora O cliente desce o conteúdo do serviço Intune, com regras de detecção
Reporting O resultado fica na consola Estado por dispositivo no portal, com falhas

2. Os comandos do dia-a-dia

Começa no catálogo: o winget search devolve nome, ID, versão e origem, e o -e exige o ID na string completa. Exemplo abreviado:

winget search -e --id Microsoft.PowerToys
Nome Id Versão Origem
PowerToys Microsoft.PowerToys 0.9x.x winget

A instalação leva o --silent e o --accept-package-agreements — o silêncio do UI e os acordos de licença:

winget install -e --id Microsoft.PowerToys --silent --accept-package-agreements
Successfully installed

O winget list mostra todas as aplicações registadas e marca o que tem actualização. O winget upgrade lista as novas versões disponíveis, o --all executa a fila, e o --include-unknown traz as apps que não declaram versão:

winget upgrade
winget upgrade --all --silent

A desinstalação aceita apps fora do winget, pelo desinstalador que o Windows já conhece. O --source winget evita os acordos da fonte msstore no meio do lote:

winget uninstall -e --id Microsoft.PowerToys --source winget

3. Export e import

O par export/import vira a lista de software em ficheiro e volta como fila de instalações:

winget export -o C:\Soft\padrao.json --accept-source-agreements
winget import -i C:\Soft\padrao.json --ignore-unavailable --accept-package-agreements

O export escreve JSON com a secção Sources e a lista Packages por PackageIdentifier — a versão instalada só entra com o --include-versions, e por omissão o import leva a mais recente. Apps sem correspondência geram avisos e ficam de fora. O import corre em série, avisa o que já existe e segue em frente com o --ignore-unavailable.

Software fora do catálogo entra pelo manifest YAML local, na opção -m:

winget install -m C:\Soft\app.yaml

4. O winget no Windows 11 moderno

No Windows 11 actual, o winget faz parte do App Installer, componente de sistema que a Microsoft Store entrega e actualiza por si. O suporte vai do Windows 10 1809 ao Windows Server 2025, via Updates. O comando só responde depois do primeiro login. Se faltar, o PowerShell repõe o registo:

Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe

As fontes por omissão são três:

winget source list
Name Argument Explicit
msstore https://storeedgefd.dsx.mp.microsoft.com/v9.0 false
winget https://cdn.winget.microsoft.com/cache false
winget-font https://cdn.winget.microsoft.com/fonts true

O msstore serve o catálogo da Store, o winget recebe os manifests da comunidade, e o winget-font guarda os tipos de letra — só responde quando o --source o aponta.

ℹ

A actualização do próprio winget corre pela Store: a série estável está na 1.29, a última é a 1.29.380, e a 1.30 seguiu em preview ao fim de Outubro — antes de copiar para outro sítio, reverifica as tags no GitHub.

5. Settings e repositório próprio

O winget settings abre o ficheiro de definições no editor de JSON por omissão, com o schema em linha:

{
"$schema": "https://aka.ms/winget-settings.schema.json",
"source": { "autoUpdateIntervalInMinutes": 60 },
"installBehavior": { "archiveExtractionMethod": "tar" }
}

O intervalo de actualização das fontes entra pela chave source, os comportamentos de instalação pelo installBehavior, e os experimentais pelo experimentalFeatures.

Um catálogo interno entra pelo winget source add, com direitos de administrador:

winget source add -n interno -a https://srv-interno/winget/cache --trust-level trusted

Os tipos de fonte suportados são o Microsoft.PreIndexed.Package e o Microsoft.Rest para índice por REST. O --explicit marca a fonte para só responder quando apontada, e o source reset devolve as três de fábrica.

6. Armadilhas de script

  • O ID muda com o publisher: fusões e rebrands voltam a publicar o mesmo software sob outro PackageIdentifier, e a lista exportada pode encontrar entradas que o import já não apanha.
  • O silêncio nunca é total: o --silent suprime o UI, mas alguns instaladores custom abrem caixas à mesma e param o lote no meio.
  • O Server não chega sozinho: só a linha 2025 traz o comando de fábrica. Nas versões anteriores, sem suporte oficial — quem o instala à mão fica sem actualizações pelo mesmo canal.
  • O upgrade apanha falhas de hash: instaladores de terceiros sem alteração declarada de versão falham a verificação e ficam reprovados na fila do --all. O --ignore-security-hash salta a verificação, e nem por omissão: só responde depois de winget settings --enable InstallerHashOverride num terminal elevado, e a política EnableHashOverride pode bloquear a entrada toda. Fica com desaconselhado gravado no comando.

7. 15 máquinas numa tarde

A máquina modelo do escritório fornece o padrão:

winget export -o C:\Soft\padrao.json --accept-source-agreements

O ficheiro vai para a partilha do servidor e as apps pessoais saem do JSON, uma linha por app. Em cada máquina, na mesma consola elevada:

winget import -i \\SRV\Soft\padrao.json --ignore-unavailable --accept-package-agreements
winget upgrade --all --silent
winget list

Dez a quinze minutos por máquina, com o winget list a provar o inventário no fim — primeiro o import, depois o upgrade --all, e os IDs que o publisher mudou corrigem-se à mão.

Fontes Oficiais

Artigos Relacionados