La instalación limpia de un sistema operativo es un procedimiento rutinario y periódico para administradores de sistemas (SysAdmins), ingenieros de DevOps y entusiastas del software. No obstante, la fase posterior a la instalación —que abarca la eliminación de componentes preinstalados (debloat), la parametrización de la interfaz de usuario, la alteración de claves del registro y la descarga de herramientas esenciales— suele convertirse en una secuencia tediosa, repetitiva y altamente susceptible a errores humanos.
El administrador de sistemas Korbin Brown ha documentado un experimento que resuelve este cuello de botella recurrente. Aprovechando las capacidades de comprensión contextual y generación de código de la herramienta
Este manual desglosa minuciosamente la arquitectura de dicho script, las llamadas de API y comandos involucrados, la estructura de almacenamiento en el registro de Windows, el aprovisionamiento de paquetes y las metodologías de seguridad recomendadas para auditar y ejecutar este tipo de código en entornos de producción.
🏗️ La arquitectura del cuello de botella: Por qué la documentación supera a la sintaxis
Para comprender la magnitud de este desarrollo, no basta con analizar la sintaxis de PowerShell. La complejidad real del aprovisionamiento en Windows radica en la fragmentación de su arquitectura de configuración.
Un administrador de sistemas que intenta automatizar un equipo desde cero se enfrenta históricamente a tres grandes cuellos de botella informativos:
Resolución de Identificadores de Paquetes: Localizar las cadenas exactas de identificación (Package IDs) dentro del repositorio central de
(por ejemplo, diferenciarWindows Package Manager Winget Brave.Bravede otros derivados no oficiales).Navegación en la Colmena del Registro: Identificar las rutas exactas dentro de
HKCU(HKEY_CURRENT_USER) yHKLM(HKEY_LOCAL_MACHINE), así como los tipos de datos requeridos (DWORD,String,Multi-String) y sus valores numéricos correspondientes.Idempotencia y Manejo de Errores: Escribir código capaz de verificar el estado actual del sistema antes de aplicar una modificación, evitando que el script falle o genere entradas duplicadas al ejecutarse por segunda vez.
La herramienta
💻 Desglose técnico de la estructura del Script de PowerShell
El script generado se divide en bloques funcionales bien delimitados. Esta modularidad previene interdependencias fallidas (por ejemplo, intentar modificar el registro de una aplicación antes de que su instalador haya terminado su ejecución).
Etapas secuenciales del pipeline de ejecución:
Paso 1: Verificación de Privilegios de Administrador (Elevación Execution).
Paso 2: Despliegue de Aplicaciones vía Winget (Package ID Exacto).
Paso 3: Modificación del Registro de Windows (Políticas HKCU / HKLM).
Paso 4: Eliminación de Telemetría y Bloatware (Módulos AppX y Servicios).
Paso 5: Aprovisionamiento de Entorno Dev (Windows Terminal + WSL2).
Paso 6: Configuración de Continuidad tras Reinicio (Persistencia RunOnce).
📦 Fase 1: Gestor de paquetes Winget y aprovisionamiento de software
La primera etapa del script utiliza el gestor de paquetes oficial integrado en las versiones modernas de Windows. La automatización evita las descargas manuales a través de navegadores web, mitigando los riesgos de ataques de suplantación de identidad o descarga de software modificado (malvertising).
Lista de aplicaciones y comandos de automatización
El script utiliza un bucle sobre un arreglo asociativo de cadenas que representan los identificadores de paquetes. A continuación se presentan las aplicaciones integradas y sus identificadores exactos validados dentro de
| Aplicación | Package ID de Winget | Propósito en el Sistema | Parámetros de Instalación Silenciosa |
| Brave Browser | Brave.Brave | Navegación enfocada en privacidad | --silent --accept-package-agreements |
| Notepad++ | Notepad++.Notepad++ | Editor de texto ligero y código | --silent --accept-package-agreements |
| 7-Zip | 7zip.7zip | Gestión de archivos comprimidos | --silent --accept-package-agreements |
| VLC Media Player | VideoLAN.VLC | Reproducción multimedia multisoporte | --silent --accept-package-agreements |
| Everything | Voidtools.Everything | Indexación y búsqueda instantánea | --silent --accept-package-agreements |
| Visual Studio Code | Microsoft.VisualStudioCode | Entorno de desarrollo (IDE) | --silent --accept-package-agreements |
| PowerToys | Microsoft.PowerToys | Utilidades avanzadas del sistema | --silent --accept-package-agreements |
| Git | Git.Git | Control de versiones de software | --silent --accept-package-agreements |
| Windows Terminal | Microsoft.WindowsTerminal | Consola moderna de comandos | --silent --accept-package-agreements |
Lógica del módulo de instalación en PowerShell
Para asegurar que el script no se detenga ante errores de red o paquetes previamente instalados, se aplica la verificación de estado recomendada en la documentación de
El sistema ejecuta una iteración sobre la lista declarada. En cada ciclo, realiza la consulta previa invocando la bandera --exact --id. Si el paquete no se encuentra registrado en el inventario local, el script dispara la instrucción de instalación silenciosa incorporando las banderas --silent, --accept-source-agreements y --accept-package-agreements, lo cual suprime cualquier interacción manual o ventana emergente.
⚙️ Fase 2: Manipulación del Registro de Windows y personalización de la UX
Una de las etapas más delicadas que aborda la solución desarrollada por Korbin Brown junto a
Rutas de registro y variables modificadas
| Ajuste del Sistema | Ruta en el Registro | Nombre de Clave | Tipo | Valor Aplicado |
| Modo Oscuro del SO | HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize | SystemUsesLightTheme | DWORD | 0 (Desactivado) |
| Modo Oscuro de Apps | HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize | AppsUseLightTheme | DWORD | 0 (Desactivado) |
| Mostrar Archivos Ocultos | HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced | Hidden | DWORD | 1 (Ver todos) |
| Mostrar Extensiones | HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced | HideFileExt | DWORD | 0 (Desplegar extensiones) |
| Abrir en "Este Equipo" | HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced | LaunchTo | DWORD | 1 (Ruta directa) |
| Confirmar Borrado | HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer | ConfirmFileDelete | DWORD | 1 (Pedir confirmación) |
Para garantizar una ejecución libre de errores, el script define una función personalizada para la escritura en el registro. Esta rutina evalúa mediante el cmdlet Test-Path si la ruta de destino existe en el árbol. De no estar presente, crea la estructura contenedora mediante New-Item antes de invocar la asignación de valor con Set-ItemProperty. Una vez actualizados los valores, el script ejecuta un reinicio forzado del proceso explorer.exe para refrescar la interfaz gráfica de forma inmediata.
🧹 Fase 3: Operaciones de Debloat, desactivación de telemetría y módulos molestos
Windows incluye por defecto aplicaciones empaquetadas en formato AppX, motores de búsqueda vinculados a la web y módulos de IA que no siempre son requeridos por los administradores de sistemas en entornos técnicos.
| Componente Intervenido | Método de Desactivación / Eliminación | Ruta o Directiva Principal |
| Microsoft Copilot | Directiva del Registro (HKLM / HKCU Policies) | DisableWindowsCopilot (Valor: 1) |
| Bing Search en Inicio | Alteración de Clave en Explorador | DisableSearchBoxSuggestions (Valor: 1) |
| Sugerencias de Contenido | Desactivación en ContentDeliveryManager | SystemPaneSuggestionsEnabled (Valor: 0) |
| Telemetría y Diagnóstico | Detención de Servicio DiagTrack | Estado del Servicio cambiado a Disabled |
Desinstalación programática de paquetes AppX (Bloatware)
Para erradicar el software preinstalado, el script recorre un arreglo de identidades de aplicaciones que incluye elementos como Microsoft.BingNews, Microsoft.BingWeather, Microsoft.GetHelp, Microsoft.YourPhone y Microsoft.ZuneVideo.
La eliminación se lleva a cabo en dos niveles operacionales:
Perfil del Usuario Actual: Se invoca
Get-AppxPackagecanalizado al comandoRemove-AppxPackage.Imagen de Aprovisionamiento Global: Se consulta la lista del sistema mediante
Get-AppxProvisionedPackage -Onlinepara remover la referencia conRemove-AppxProvisionedPackage, evitando que las aplicaciones vuelvan a crearse cuando se registre un nuevo usuario en el equipo.
🐧 Fase 4: Despliegue automatizado de WSL2 y gestión de persistencia
Para administradores que operan en entornos mixtos Linux/Windows, la configuración de
Estrategia de automatización mediante la clave RunOnce
Para mantener la automatización del proceso sin perder el hilo de ejecución tras el reinicio obligatorio, el script implementa un mecanismo de persistencia temporal utilizando la clave RunOnce del registro de Windows:
Verificación de estado: El script consulta el estado del componente
Microsoft-Windows-Subsystem-LinuxutilizandoGet-WindowsOptionalFeature.Inyección de la orden de reinicio: Si el servicio no está activo, obtiene la ruta completa del archivo
.ps1activo y crea una entrada de registro bajo la claveHKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce.Habilitación de características: Habilita de forma consecutiva la plataforma de máquina virtual y la característica opcional de WSL sin forzar el reinicio inmediato (
-NoRestart).Descarga de la distribución: Invoca la instrucción
wsl --install -d Ubuntu --no-launchpara descargar los paquetes base sin abrir la consola interactiva.Reinicio y reanudación: Dispara el comando
Restart-Computer. Al volver a iniciar sesión, Windows lee la entrada almacenada enRunOncey reanuda la segunda fase del script de manera transparente.
🛡️ Auditoría de seguridad y análisis de riesgos antes de la ejecución
Ejecutar un script de PowerShell con privilegios elevados (Run as Administrator) que modifica archivos del sistema y la colmena del registro implica responsabilidades de ciberseguridad. Los modelos de lenguaje de inteligencia artificial como
| Entorno de Evaluación | Método de Aislamiento | Nivel de Riesgo para el Host |
| Windows Sandbox | Entorno ligero desechable basado en contenedor nativo | Nulo (Cierre destruye todo el estado) |
| Máquina Virtual (Hyper-V) | Virtualización completa con puntos de restauración (Snapshots) | Nulo (Se puede revertir el estado) |
| Sistema de Producción | Ejecución directa sobre la instalación principal | Alto (Requiere revisión previa de código) |
Protocolo de prueba en Windows Sandbox
Para reducir el riesgo de inestabilidad, la herramienta recomendada por Korbin Brown para validar scripts desconocidos es
El procedimiento de validación se resume en:
Activar la característica ejecutando el comando de activación del módulo
Containers-DisposableClientVMen PowerShell.Iniciar el entorno aislado de Windows Sandbox desde el menú Inicio.
Copiar el script
.ps1y pegarlo en el escritorio del entorno virtualizado.Ejecutar la consola de PowerShell como administrador dentro de la Sandbox y lanzar el script para auditar las llamadas de red, la correcta instalación de paquetes vía
y la integridad del Explorador de archivos.Windows Package Manager Winget
📑 Manual paso a paso para construir un script personalizado con Claude Code
Cualquier usuario puede replicar el experimento de Korbin Brown para crear un sistema de despliegue adaptado a su propio flujo de trabajo. A continuación se presenta la metodología recomendada para formular las instrucciones (prompts) y estructurar la automatización.
Paso 1: Inventariado y definición de requisitos
Redacta una lista preliminar con el software indispensable (Brave, VS Code, 7-Zip, VLC), los ajustes visuales requeridos (tema oscuro, mostrar extensiones de archivo) y los componentes a eliminar (widgets, sugerencias de Bing, telemetría).
Paso 2: Formulación de la instrucción en lenguaje natural
Ingresa a la consola de RunOnce.
Paso 3: Guardado, permisos y ejecución
Guarda el código generado en un archivo local llamado
Setup-Windows.ps1.Abre una consola de PowerShell con elevación de privilegios de administrador.
Ajusta la política de ejecución para la sesión activa mediante la instrucción
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force.Lanza el script ejecutando
.\Setup-Windows.ps1.
📌 Conclusión y visión técnica del aprovisionamiento moderno
El flujo de trabajo popularizado por Korbin Brown marca un cambio de paradigma en la administración de sistemas personales y corporativos. La barrera histórica para la automatización en entornos Windows nunca fue la incapacidad de escribir código en
Al delegar la fase de documentación, estructuración de claves y síntesis de comandos en una herramienta especializada como
🔍 Preguntas Frecuentes (FAQ)
Resuelve la secuencia tediosa, repetitiva y propensa a errores humanos que implica la configuración posterior a una instalación limpia, automatizando el proceso completo de eliminación de bloatware, parametrización del sistema y descarga de herramientas en aproximadamente 20 minutos.
Se enfrenta a la resolución exacta de identificadores de paquetes (Package IDs) en Winget, la navegación compleja en la colmena del registro (HKCU y HKLM) con sus tipos de datos específicos, y la necesidad de escribir código idempotente que verifique el estado del sistema antes de aplicar modificaciones.
El script ejecuta una iteración consultando previamente el identificador exacto (--exact --id) de cada aplicación. Si el paquete no está presente en el inventario local, dispara la instalación silenciosa incorporando banderas como --silent, --accept-source-agreements y --accept-package-agreements.
Utiliza la clave RunOnce del registro de Windows (HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce), donde inyecta la ruta del script activo para que, tras el reinicio forzado por la activación del hipervisor, el sistema reanude la segunda fase de forma transparente.
Se recomienda utilizar Windows Sandbox, un entorno ligero y desechable basado en contenedor nativo disponible en Windows Pro y Enterprise, que permite ejecutar el archivo .ps1 y verificar llamadas de red, paquetes de Winget e integridad del sistema sin riesgos para el host.