Instalar aplicaciones en grupo con winget: una configuración limpia de Windows en 5 minutos

¿Te fue útil?

Máquina Windows nueva. Imagen fresca. O peor: una reinstalación “limpia” que está limpia como una cocina justo después de cocinar pasta: técnicamente sí, pero todavía queda el trabajo real.

El trabajo real son las aplicaciones. Instalarlas una por una supone un impuesto a tu atención, tu tiempo y tu capacidad para mantener consistencia entre máquinas. winget es la forma de dejar de pagar ese impuesto.

Qué es winget (y qué no es)

winget es el gestor de paquetes de línea de comandos de Microsoft para Windows. Instala y actualiza aplicaciones desde fuentes configuradas, con un flujo de trabajo que se parece sospechosamente al mundo Linux—porque, sí, todos hemos visto lo productivo que puede ser eso.

Pero no es magia, y no sustituye por sí solo a una imagen dorada. Es una forma fiable y automatizable de descargar instaladores, ejecutarlos y llevar registro de lo instalado. Aún tienes que pensar como operador: idempotencia, fuentes, límites de confianza y modos de fallo.

En qué destaca winget

  • Reproducibilidad: puedes definir un conjunto de apps y aplicarlo de nuevo en cualquier máquina.
  • Velocidad: el trabajo paralelizable se convierte en esfuerzo lineal: un script, una ejecución.
  • Actualizaciones: puede auditar y actualizar muchas apps de una sola vez.
  • Baja ceremonia: ya está en Windows 10/11 moderno vía App Installer (o es fácil de añadir).

En qué falla (o no hace nada)

  • Gestión profunda de configuración: no establecerá claves de registro, dotfiles, certificados o proxies corporativos. Para eso necesitas scripts/MDM.
  • Todas las apps del mundo: la cobertura es buena, no total. Algunos proveedores resisten las instalaciones silenciosas como si fuera un rasgo de personalidad.
  • Modo offline por defecto: winget asume acceso en red a las fuentes. Puedes preparar paquetes, pero no es su postura por defecto.
  • Tolerancia a la ambigüedad: buscar por nombre puede seleccionar lo incorrecto si no fijas IDs y fuentes.

Idea parafraseada (atribución): Werner Vogels ha enfatizado que construyes para el fallo, no solo para el éxito. Esa es la mentalidad correcta para instalaciones masivas: tu plan debe incluir qué hacer cuando algo no se instala.

Hechos interesantes y breve historia

Un poco de contexto te ayuda a tomar mejores decisiones con winget. Aquí hay hechos concretos, no triviales, que importan operativamente:

  1. winget se lanzó públicamente en 2020 como Windows Package Manager, después de que Microsoft viera a desarrolladores reinventando instaladores con scripts y sufrimiento.
  2. Se distribuye vía “App Installer” en muchos sistemas, lo que significa que el cliente winget puede actualizarse fuera del ciclo de versiones mayor de Windows.
  3. Los “IDs” de paquete son el identificador estable (como Git.Git), mientras que los nombres son marketing. Trata siempre los nombres como datos no confiables.
  4. winget puede instalar desde múltiples fuentes (repositorio community, Microsoft Store y fuentes empresariales/privadas), y la selección de fuente afecta la confianza y el comportamiento de instalación.
  5. El soporte para instalación silenciosa depende de la tecnología del instalador (MSI, Inno Setup, NSIS, EXE personalizado). winget ayuda, pero no puede reescribir la lógica del instalador del proveedor.
  6. Puede exportar/importar el conjunto de apps de una máquina usando JSON, lo que convierte “quiero esta configuración en todas partes” en un flujo de trabajo real, no en un deseo.
  7. Algunas instalaciones requieren elevación de administrador incluso si la app “parece a nivel de usuario”, porque hay controladores, extensiones de shell o componentes a nivel sistema.
  8. Las apps de la Store se comportan distinto respecto a las clásicas Win32: la resolución de dependencias y el contexto de usuario son aspectos interesantes en entornos corporativos.
  9. Los proxies corporativos rompen configuraciones ingenuas porque las fuentes son endpoints HTTPS y los instaladores se descargan remotamente; los fallos de winget a menudo parecen “red aleatoria” hasta que revisas los logs correctos.

El plan de 5 minutos: de cero a totalmente aprovisionado

“Cinco minutos” es realista cuando ya sabes qué quieres instalar y no te pasas esos cinco minutos navegando por sitios como si fuera 2009.

Qué estás optimizando

Optimizamos para resultados repetibles. La máquina debe acabar con las mismas apps cada vez, independientemente de quién ejecute la configuración. Segunda prioridad: velocidad. Tercera: minimizar las solicitudes de interacción.

Flujo mínimo viable

  1. Verificar que winget existe y que las fuentes están saludables.
  2. Buscar/fijar IDs de paquetes (no nombres) desde la fuente prevista.
  3. Instalar en un comando (o importar una lista JSON curada).
  4. Verificar la instalación y capturar lo que falló.
  5. Actualizar todo y volver a verificar.

Una nota operativa: las instalaciones masivas fallan en serie cuando hay una dependencia compartida como red, proxy o permisos de administrador. No persigas cada app; persigue la restricción compartida.

Elección de paquetes: IDs, orígenes y por qué los nombres engañan

Si adoptas un solo hábito de este texto, que sea este: fija IDs de paquetes y especifica fuentes. Buscar “VS Code” puede coincidir con varios paquetes, forks o entradas con nombres similares. Tu yo futuro no apreciará instalaciones sorpresa.

Los IDs ganan a los nombres

Los IDs están diseñados para ser identificadores estables. Los nombres están diseñados para ser clicables. Tú no estás clicando. Usa IDs.

La fuente importa: confianza, cadencia de actualizaciones y mecánica de instalación

winget puede extraer del repositorio community (winget), de la Microsoft Store (msstore) y, potencialmente, de fuentes empresariales. Estas difieren en:

  • Límite de confianza: quién lo curó, quién lo firmó y qué tan rápido corrigen problemas.
  • Comportamiento del instalador: las instalaciones desde la Store suelen comportarse de forma más “gestionada” pero pueden ser incómodas bajo el contexto del sistema.
  • Disponibilidad de versiones: es posible que no obtengas la misma versión desde dos fuentes distintas.

Broma #1: Lo único más ambiguo que “última versión” es “funciona en mi máquina”.

Sé explícito sobre el alcance: sistema vs usuario

Algunos paquetes se instalan por usuario, otros a nivel sistema, y otros te dan opción según flags. En entornos corporativos esto importa porque la cuenta que ejecuta la instalación puede no ser el usuario principal. Si construyes una estación de trabajo para ti, por usuario está bien. Si construyes una flota, normalmente quieres a nivel sistema—a menos que la licencia o la política lo impidan.

Tareas prácticas (comandos + salida + decisiones)

Estas son tareas operativas reales que harás cuando intentes volver aburridas las instalaciones masivas. Cada tarea incluye un comando, salida representativa, qué significa la salida y la decisión que tomas a continuación.

Tarea 1: Confirmar que winget está instalado (y qué versión)

cr0x@server:~$ winget --version
v1.7.11261

Qué significa: El cliente está presente y ejecutable. La versión importa porque los flags y el comportamiento de import/export han cambiado con el tiempo.

Decisión: Si el comando no se encuentra o la versión es antigua, arregla eso antes de depurar otra cosa. No diagnostiques instalaciones de apps con una herramienta rota.

Tarea 2: Comprobar la salud de las fuentes (el culpable oculto habitual)

cr0x@server:~$ winget source list
Name     Argument                                                         Type
--------------------------------------------------------------------------------
winget   https://winget.azureedge.net/cache                               Microsoft.PreIndexed.Package
msstore  https://storeedgefd.dsx.mp.microsoft.com/v9.0                     Microsoft.Rest

Qué significa: winget conoce las fuentes por defecto y sus endpoints.

Decisión: Si msstore falta en un entorno que depende de apps de la Store, añádela o deja de esperar que los paquetes de la Store funcionen.

Tarea 3: Actualizar fuentes (cuando los resultados se ven obsoletos o la búsqueda falla)

cr0x@server:~$ winget source update
Updating all sources...
Done

Qué significa: Índices locales actualizados. Si recibes “paquete no encontrado” para algo que sabes que existe, este es el primer paso.

Decisión: Si la actualización falla, tu cuello de botella es red/proxy/SSL, no el paquete.

Tarea 4: Buscar un paquete y dejar de confiar en el nombre

cr0x@server:~$ winget search "Visual Studio Code"
Name               Id                Version   Source
------------------------------------------------------
Visual Studio Code  Microsoft.VisualStudioCode 1.86.2    winget
VSCodium           VSCodium.VSCodium  1.86.2    winget

Qué significa: Varios resultados plausibles. El ID es el ancla.

Decisión: Elige el ID correcto. En entornos gestionados, estandarízalo y no dejes que los usuarios improvisen.

Tarea 5: Inspeccionar un paquete antes de instalar (metadatos y tipo de instalador)

cr0x@server:~$ winget show Microsoft.VisualStudioCode
Found Visual Studio Code [Microsoft.VisualStudioCode]
Version: 1.86.2
Publisher: Microsoft Corporation
Installer Type: exe
Installer Url: https://update.code.visualstudio.com/1.86.2/win32-x64-user/stable

Qué significa: Ves qué vas a ejecutar, incluido el tipo de instalador y la URL.

Decisión: Si el tipo de instalador es exe, el comportamiento silencioso puede variar. Espera casos límite; prueba en una VM limpia antes de desplegar a una flota.

Tarea 6: Instalar un paquete con ID y fuente explícitos

cr0x@server:~$ winget install --id Microsoft.VisualStudioCode --source winget --accept-package-agreements --accept-source-agreements
Found Visual Studio Code [Microsoft.VisualStudioCode] Version 1.86.2
This application is licensed to you by its owner.
Downloading https://update.code.visualstudio.com/1.86.2/win32-x64-user/stable
  ██████████████████████████████  95.2 MB / 95.2 MB
Successfully installed

Qué significa: winget descargó el instalador y lo ejecutó con éxito.

Decisión: Si pide interacción, olvidaste las flags de acuerdos o el instalador ignora el modo silencioso. Decide si aceptar ese prompt, reemplazar el paquete o preconfigurar switches del instalador mediante otras herramientas.

Tarea 7: Instalar en bloque una lista curada en un comando (bueno para scripts de arranque)

cr0x@server:~$ winget install --id Git.Git --source winget --accept-package-agreements --accept-source-agreements
Found Git [Git.Git] Version 2.44.0
Downloading https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe
  ██████████████████████████████  64.1 MB / 64.1 MB
Successfully installed

Qué significa: Una única instalación de paquete. Pero normalmente encadenarás estas en un script para una experiencia de “una sola ejecución”.

Decisión: Si vas a instalar muchas apps, muévete a un archivo de importación para poder revisar cambios mediante code review en lugar de editar scripts ad hoc.

Tarea 8: Exportar el conjunto de apps de la máquina actual (para clonarlo)

cr0x@server:~$ winget export -o C:\Temp\winget-export.json
Exported package list to: C:\Temp\winget-export.json

Qué significa: Ahora tienes una instantánea JSON de los paquetes detectables por winget.

Decisión: Trata esta exportación como punto de partida, no como dogma. Elimina lo personal y fija lo que tu organización realmente soporta.

Tarea 9: Importar una lista de apps (el movimiento “cinco minutos”)

cr0x@server:~$ winget import -i C:\Temp\winget-export.json --accept-package-agreements --accept-source-agreements
Found 12 packages to install.
Installing package 1 of 12: Git [Git.Git]
Successfully installed
Installing package 2 of 12: Visual Studio Code [Microsoft.VisualStudioCode]
Successfully installed
Installing package 3 of 12: Python 3.12 [Python.Python.3.12]
Successfully installed
1 package(s) failed to install.

Qué significa: winget recorrió la lista. Un paquete falló. Esto es normal a escala.

Decisión: No vuelvas a ejecutar a ciegas. Identifica el paquete que falla y determina si es un problema transitorio de descarga, un problema de permisos o una interacción del instalador.

Tarea 10: Listar lo que winget cree que está instalado (chequeo de realidad)

cr0x@server:~$ winget list
Name                     Id                         Version
-----------------------------------------------------------
Git                      Git.Git                    2.44.0
Visual Studio Code       Microsoft.VisualStudioCode 1.86.2
Python 3.12.2            Python.Python.3.12         3.12.2
7-Zip 23.01 (x64)        7zip.7zip                  23.01

Qué significa: Esta es la vista de winget, basada en el registro de apps instaladas y los mapeos de paquetes.

Decisión: Si una app está instalada pero no aparece, winget puede no gestionarla. Decide si mantenerla fuera de banda o cambiar a un equivalente gestionado por winget.

Tarea 11: Encontrar actualizaciones disponibles (no reinstalar; actualizar)

cr0x@server:~$ winget upgrade
Name               Id                Version Available Source
------------------------------------------------------------
Git                Git.Git           2.43.0  2.44.0    winget
7-Zip              7zip.7zip         23.00   23.01     winget

Qué significa: Estás desfasado en un par de paquetes.

Decisión: En una flota, las actualizaciones deben ser escalonadas y probadas. En una máquina personal de desarrollo, simplemente actualiza. En hosts de salto de producción, sé conservador.

Tarea 12: Actualizar todo (cuando controlas el radio de impacto)

cr0x@server:~$ winget upgrade --all --accept-package-agreements --accept-source-agreements
Found 2 upgrades.
Upgrading Git [Git.Git]...
Successfully installed
Upgrading 7-Zip [7zip.7zip]...
Successfully installed

Qué significa: winget ejecutó actualizaciones en los paquetes instalados.

Decisión: Si esto es una imagen compartida, captura las versiones después de la actualización y considera fijar herramientas críticas. “Última” no es una política de control de cambios.

Tarea 13: Fijar la coincidencia correcta cuando múltiples paquetes colisionan

cr0x@server:~$ winget install --name "Python" --source winget
Multiple packages found matching input criteria. Please refine the input.
Name         Id                 Version Source
----------------------------------------------
Python 3.12  Python.Python.3.12  3.12.2  winget
Python 3.11  Python.Python.3.11  3.11.8  winget

Qué significa: winget se niega a adivinar. Bien.

Decisión: Usa --id. Si tu script usa --name, arréglalo ahora antes de que se convierta en deuda institucional.

Tarea 14: Diagnosticar una falla de paquete con logs verbosos

cr0x@server:~$ winget install --id SomeVendor.SomeApp --source winget --verbose-logs
Found SomeApp [SomeVendor.SomeApp] Version 5.1.0
Downloading...
Installer failed with exit code: 1603
See logs: C:\Users\user\AppData\Local\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir\

Qué significa: El código de salida 1603 es un clásico “error fatal” de MSI, que es tan informativo como “no”. La ruta de logs importa.

Decisión: Revisa los logs del instalador para hallar la razón real (precondición faltante, reinicio pendiente, problema de permisos). Luego decide: añadir prerequisitos, exigir reinicio o cambiar el paquete.

Tarea 15: Resetear fuentes cuando se corrompen o cambia la política

cr0x@server:~$ winget source reset --force
Resetting sources...
Done

Qué significa: winget reitera las fuentes a los valores por defecto.

Decisión: Si una política corporativa requiere una fuente privada, el reset podría eliminarla. Tras el reset, vuelve a añadir las fuentes empresariales aprobadas y documenta la línea base.

Tarea 16: Confirmar si estás ejecutando con elevación (porque la mitad de Windows trata de eso)

cr0x@server:~$ whoami /groups | findstr /i "S-1-5-32-544"
BUILTIN\Administrators

Qué significa: Estás en el grupo Administrators. No garantiza que la consola esté elevada, pero es una pista rápida.

Decisión: Si las instalaciones fallan con acceso denegado o no pueden escribir en Program Files, vuelve a ejecutar desde una terminal elevada o elige intencionalmente instalaciones por usuario.

Broma #2: Los instaladores de Windows son como los gatos—a veces hacen lo que pides, y otras te miran hasta que cambias de enfoque.

Guía de diagnóstico rápido: encuentra el cuello de botella

Cuando las instalaciones masivas fallan, tienes dos opciones: ser sistemático, o pasar la tarde aprendiendo nuevos sinónimos de “por qué”. Este es el camino sistemático.

Primero: ¿winget está sano?

  • Ejecuta winget --version. Si da error, para.
  • Ejecuta winget source list y winget source update. Si las fuentes no se actualizan, para.
  • Prueba winget search Git. Si la búsqueda falla, para.

Cuello de botella típico: proxy, inspección TLS, endpoints bloqueados, paquete App Installer roto.

Segundo: ¿el fallo está en descarga, instalación o registro?

  • Fase de descarga: los errores parecen timeouts de conexión, 403/404 o mismatch de hash.
  • Fase de instalación: obtienes un código de salida (a menudo 1603 para MSI) o “installer failed”.
  • Fase de registro: la instalación “tiene éxito” pero winget list no la muestra, o la detección de actualizaciones es incorrecta.

Decisión: Elige tu siguiente prueba según la fase. No trates un error de red como un problema de MSI.

Tercero: ¿es un problema de permisos/elevación?

  • Errores al escribir en Program Files o HKLM son casi siempre problemas de elevación.
  • Algunos paquetes se instalan por usuario por defecto; si ejecutas como SYSTEM (MDM), el “usuario” no es quien crees.

Decisión: Decide si la app debe ser a nivel sistema o por usuario, y alinea el contexto de ejecución en consecuencia.

Cuarto: ¿es el paquete (metadatos malos, instalador roto o comportamiento del proveedor cambiado)?

  • Usa winget show --id … para confirmar tipo de instalador y URL.
  • Reintenta con --verbose-logs e inspecciona los logs del instalador reales.

Decisión: Si el proveedor cambió los switches silenciosos, espera la actualización del paquete, despliega con tu propio método o elige un paquete alternativo.

Quinto: ¿la escala y la concurrencia te están afectando?

  • Las instalaciones masivas pueden saturar disco, CPU o red en dispositivos modestos.
  • La protección endpoint puede ralentizar cada instalador descargado durante el escaneo.

Decisión: Escalona las instalaciones, prioriza herramientas críticas primero y mide. “Está lento” no es un diagnóstico.

Errores comunes: síntomas → causa raíz → solución

Error 1: “Paquete no encontrado” para algo que ves en línea

Síntoma: winget install --id Vendor.App no encuentra coincidencias.

Causa raíz: las fuentes no están actualizadas, se seleccionó la fuente equivocada o la máquina está bloqueada para alcanzar el índice.

Solución: Ejecuta winget source update, luego winget search con --source especificado. Si sigue fallando, investiga proxy/TLS o restricciones de política.

Error 2: Se instaló la app equivocada porque usaste --name

Síntoma: La instalación “funcionó”, pero la app es la edición/fork/canal equivocado.

Causa raíz: colisiones de nombres. Los nombres comerciales no son identificadores únicos.

Solución: Fija siempre --id y, por lo general, --source. En imports, conserva IDs y elimina entradas ambiguas.

Error 3: Las instalaciones fallan con acceso denegado o no pueden escribir en Program Files

Síntoma: “Access is denied”, “requires elevation” o códigos de salida del instalador ligados a permisos.

Causa raíz: ejecución sin elevación; intentar instalaciones a nivel sistema desde una terminal no elevada.

Solución: Ejecuta una terminal elevada para instalaciones a nivel sistema, o elige deliberadamente instalaciones por usuario cuando proceda. No mezcles y esperes que funcione.

Error 4: El import funciona en mi portátil pero falla en entornos corporativos

Síntoma: Los imports fallan en dispositivos gestionados; descargas hacen timeout; las instalaciones de la Store fallan.

Causa raíz: proxy/inspección TLS, Store bloqueada o política que impide ciertas fuentes.

Solución: Valida las fuentes desde el inicio. Si la Store está bloqueada, elimina los paquetes msstore del manifiesto y estandariza en el repositorio community o en una fuente empresarial.

Error 5: “Successfully installed” pero la app no está (o las actualizaciones no se detectan)

Síntoma: winget dice éxito; la app no aparece en los menús esperados; winget list no la ve.

Causa raíz: el instalador instaló por usuario bajo otra cuenta, o la app no se registra de una forma que winget pueda detectar.

Solución: Confirma el contexto de ejecución (usuario vs SYSTEM). Prefiere paquetes que se registren correctamente. Para apps obstinadas, géstionalas fuera de winget y acepta el límite.

Error 6: Las actualizaciones masivas rompen una cadena de herramientas crítica

Síntoma: tras winget upgrade --all, fallan builds o plugins.

Causa raíz: actualizar todo sin stagings, fijado de versiones o comprobaciones de compatibilidad.

Solución: En equipos, realiza actualizaciones por anillos. Mantén un manifiesto conocido y bueno. Actualiza herramientas de desarrollo deliberadamente, no impulsivamente.

Error 7: Suponer que “silencioso” significa “sin UI jamás”

Síntoma: algunos instaladores aún muestran prompts durante ejecuciones masivas.

Causa raíz: el instalador ignora flags silenciosos, requiere consentimiento de reinicio o muestra EULA que winget no puede suprimir.

Solución: Reemplaza el paquete, rodea el instalador con scripts, o acepta que no es automatizable sin cooperación del proveedor. No bases tu setup de cinco minutos en un instalador dramático.

Tres micro-historias corporativas desde el terreno

Micro-historia 1: El incidente causado por una suposición equivocada

Estaban desplegando nuevos portátiles Windows a un grupo mixto: desarrolladores, analistas y un puñado de personas que vivían en Excel y no querían sorpresas. TI decidió “modernizar el aprovisionamiento” con winget. Buena idea.

La suposición equivocada fue pequeña: “Si ejecutamos winget como SYSTEM durante el enrolamiento, las apps estarán para el usuario.” A veces eso es cierto para instaladores a nivel sistema. También a veces es muy falso. Varios paquetes en la lista eran por usuario por defecto. Se instalaron de forma preciosa—solo que no para la persona que iniciaría sesión después.

Llegó el lunes. La gente inició sesión y las herramientas esperadas no estaban presentes. Llegaron tickets de soporte, y el equipo pasó horas re-ejecutando instalaciones en contexto de usuario. Algunas apps acabaron duplicadas: una instalación bajo SYSTEM, otra bajo el usuario, además de detección de actualizaciones confundida. Fue un caos en la manera que solo los límites de contexto de Windows pueden serlo.

La solución no fue heroica. Dividieron el manifiesto en dos: herramientas a nivel sistema instaladas durante el enrolamiento (ejecutando elevado), y apps por usuario instaladas en el primer inicio mediante un script en contexto usuario. También eliminaron paquetes que no se comportaban de manera determinista y gestionaron esos mediante el centro de software.

La lección: winget no te exime de pensar en el alcance de la instalación. De hecho, te obliga a ser explícito al respecto.

Micro-historia 2: La optimización que salió mal

Otra organización intentó recortar tiempo de aprovisionamiento. Midieron que descargar instaladores tomaba más tiempo, así que optimizaron la red: paralelizar todo, iniciar todas las instalaciones lo más rápido posible y dejar que la protección del endpoint lo arreglara.

En laboratorio se veía genial. En hardware real, en una red corporativa real, salió mal. El uso de disco se disparó: múltiples instaladores descomprimiéndose simultáneamente, escribiendo en directorios temporales y disparando escaneos antivirus. La CPU subió. La red quedó en picos. Máquinas que debían estar “listas en minutos” se volvieron lentas, y algunas instalaciones hicieron timeout o fallaron con códigos genéricos.

El equipo inicialmente culpó a winget. Luego al repositorio. Luego a Windows Update. El patrón era más simple: crearon una tormenta de contención de recursos y la llamaron “optimización”.

Retrocedieron a un enfoque escalonado: instalar un núcleo pequeño primero (terminal, navegador, certificados, cliente VPN), luego una segunda ola para herramientas de desarrollo, y una ola final para apps opcionales. También añadieron pequeñas demoras entre instalaciones pesadas y evitaron disparar instalaciones de la Store al mismo tiempo que grandes paquetes Win32.

El aprovisionamiento pasó a ser predeciblemente rápido en lugar de ocasionalmente rápido. Los operadores prefieren “predecible” a “ocasionalmente impresionante” siempre.

Micro-historia 3: La práctica aburrida pero correcta que salvó el día

Esta no es glamorosa. Es la clase de práctica que la gente salta hasta el día que no puede.

Un pequeño equipo de plataforma mantenía un archivo de importación de winget en control de versiones. Cada cambio se revisaba. Fijaban IDs. Anotaban por qué cada app estaba en la lista. También mantenían una pequeña sección “romper cristal”: qué hacer cuando un instalador falla, qué logs revisar y qué apps podían instalarse manualmente.

Entonces un proveedor cambió silenciosamente un instalador. El paquete siguió existiendo, pero la instalación silenciosa comenzó a devolver código distinto de cero a menos que un prerequisito estuviera presente. Las máquinas empezaron a fallar el aprovisionamiento alrededor del 80%—lo suficientemente tarde para perder tiempo, pero lo bastante temprano para bloquear la incorporación.

Como tenían un manifiesto revisado y una versión previa conocida buena del archivo de importación, hicieron rollback inmediatamente y sacaron nuevas máquinas. Luego investigaron correctamente: reprodujeron en una VM, confirmaron el prerequisito y actualizaron sus pasos de aprovisionamiento. No necesitaron heroísmos, solo disciplina.

La práctica aburrida—manifiestos versionados más rollback—convirtió una semana potencialmente caótica en un cambio controlado.

Listas de verificación / plan paso a paso

Lista A: Arranque rápido de estación personal (rápido y práctico)

  1. Abre Windows Terminal como tu usuario. Si sabes que necesitas instalaciones a nivel sistema, ábrelo elevado.
  2. Verifica que winget funciona: winget --version.
  3. Refresca fuentes: winget source update.
  4. Instala herramientas centrales primero (navegador, mejoras de terminal, git): fija IDs y usa flags de acuerdos.
  5. Instala herramientas/runtime de desarrollo (Python/Node/Java) explícitamente por ID y versión si hace falta.
  6. Ejecuta winget list y verifica lo obtenido.
  7. Ejecuta winget upgrade y decide si actualizar ahora o más tarde.
  8. Exporta una línea base cuando te guste: winget export -o ....

Lista B: Build estándar para el equipo (repetible y revisable)

  1. Crea un archivo de importación curado desde una máquina de referencia limpia, luego recórtalo.
  2. Estandariza en IDs; elimina apps ambiguas u opcionales.
  3. Decide qué(s) fuente(s) están permitidas. Documenta eso.
  4. Prueba el import en una VM fresca y en un portátil gestionado (proxy + protección endpoint incluidos).
  5. Registra fallos con --verbose-logs y crea una lista conocida de “niños problemáticos”.
  6. Separa instalaciones a nivel sistema vs por usuario si despliegas vía contexto SYSTEM.
  7. Controla el manifiesto en versión; requiere revisión para cambios.
  8. Define rollback: guarda el último manifiesto conocido bueno y el procedimiento para re-ejecutar el import.

Lista C: “Lo necesito en 5 minutos” reconstrucción de emergencia

  1. Resetea fuentes si la búsqueda está rota: winget source reset --force.
  2. Actualiza fuentes: winget source update.
  3. Ejecuta tu archivo de import con flags de acuerdos.
  4. Si algún paquete falla, no bloquees todo el setup: elimínalo temporalmente, termina el aprovisionamiento y luego vuelve con logs.
  5. Ejecuta winget upgrade --all solo después de que la línea base esté estable.

Preguntas frecuentes

1) ¿Viene winget instalado por defecto en Windows 10/11?

A menudo, sí—porque viene con App Installer de Microsoft. Pero “a menudo” no es “siempre”, especialmente en imágenes corporativas recortadas. Verifica con winget --version.

2) ¿Debo usar winget install con nombres o IDs?

IDs. Los nombres son para humanos que navegan. Los IDs son para scripts y reproducibilidad. Si te importa la consistencia, no des al resolvedor la oportunidad de adivinar.

3) ¿Cuál es la mejor forma de instalar 20–50 apps rápido?

Usa winget import con un archivo JSON curado. Es revisable, diffable y más fácil de mantener consistente que un largo script de instalaciones.

4) ¿Por qué winget dice “Successfully installed” pero no encuentro la app?

Lo más habitual: se instaló por usuario bajo otra cuenta (SYSTEM vs usuario), o la app no se registra como esperas. Comprueba el contexto y luego winget list. Si está instalada pero no es detectable, es un desajuste de empaquetado/registro, no un typo en el comando winget.

5) ¿Puede winget instalar apps de Microsoft Store en entornos empresariales?

A veces. Depende de si la Store está permitida y de si el dispositivo/usuario puede acceder a ella. Si la Store está bloqueada, no pongas paquetes de la Store en tu lista de import y luego te sorprendas.

6) ¿Es seguro winget upgrade --all?

En una máquina personal, normalmente sí. En un equipo o entorno empresarial, es un evento de cambio. Escala las actualizaciones, prueba cadenas de herramientas críticas y mantén opciones de rollback.

7) ¿Qué hago con apps que no soportan instalaciones silenciosas?

Tienes tres opciones realistas: elegir otro paquete, gestionar esa app fuera de winget (MDM, manual o herramienta del proveedor), o aceptar prompts. No intentes “forzar más” un instalador que rehúsa automatización.

8) ¿winget reemplaza las imágenes doradas?

No. Lo complementa. Las imágenes doradas solucionan configuración OS base y controladores. winget soluciona instalación y actualización de apps. Usa ambos si te importan velocidad y control.

9) ¿Cómo mantener múltiples máquinas consistentes en el tiempo?

Mantén un archivo de import curado en control de versiones, ejecútalo durante el aprovisionamiento y usa ciclos de actualización controlados. El truco no es instalar apps; es gestionar el cambio.

10) ¿Qué hago cuando un paquete de repente empieza a fallar para todos?

Asume que el proveedor cambió algo o que un prerequisito cambió. Extrae logs con --verbose-logs, reproduce en una VM limpia y haz rollback a un manifiesto conocido bueno mientras investigas.

Conclusión: próximos pasos que realmente funcionan

Si quieres una configuración limpia de Windows en cinco minutos, deja de tratar las instalaciones de apps como una tarea puntual. Trátalas como infraestructura: declarada, repetible y observable cuando fallen.

Haz esto a continuación:

  1. Ejecuta winget source update y verifica que las fuentes están saludables.
  2. Construye una lista de import curada: exporta desde una máquina conocida buena y luego elimina el ruido.
  3. Fija IDs y especifica fuentes para todo lo que importe.
  4. Prueba en una VM limpia y luego en un dispositivo gestionado (proxy y protección endpoint incluidos).
  5. Controla el manifiesto en versión y mantén una versión previa lista para rollback.
  6. Adopta la guía de diagnóstico rápido para que los fallos no se conviertan en folklore.

La ganancia no es solo velocidad. Es que la configuración se vuelva aburrida. Y aburrido es lo que quieres cuando eres la persona a la que llaman.

← Anterior
Windows sigue reinstalando controladores defectuosos: deténlo para siempre
Siguiente →
Instalación de openSUSE Tumbleweed: lanzamiento continuo sin desastres

Deja un comentario