Cuando gestionas la instalación de software en Windows, puede ser útil automatizar el proceso con PowerShell. Este artículo te proporciona un script reutilizable que:
Comprueba si el software ya está instalado.
Si no lo está, descarga un archivo ZIP desde una URL.
Extrae el instalador del ZIP.
Ejecuta la instalación en modo silencioso.
Elimina los archivos temporales al finalizar.
Casos de uso
Este script es útil para:
- Automatizar despliegues en entornos corporativos.
- Integrar instalaciones en scripts de aprovisionamiento.
- Crear paquetes de instalación personalizados.
Requisitos
Antes de usar este script:
- Debes tener PowerShell 5.0 o superior.
- Ejecutar PowerShell como administrador.
- Asegúrate de que el software a instalar disponga de una opción de instalación silenciosa (como
/S
o/quiet
). - La instalación debe poder detectarse mediante el registro de Windows.
Personalización del script
Tendrás que ajustar 3 variables:
$softwareName = "NombreDelSoftware" # Nombre del software tal como aparece en el Registro
$zipUrl = "https://ruta/del/software.zip" # URL directa del ZIP
$silentArgs = "/S" # Argumentos de instalación silenciosa
¿Cómo detecta si el software está instalado?
Consulta el registro de Windows, donde el sistema guarda los datos de instalación de programas:
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
Filtra por el nombre del software en el campo DisplayName
.
Script PowerShell Generalizado
# === PERSONALIZAR ESTAS VARIABLES ===
$softwareName = "NombreDelSoftware"
$zipUrl = "https://ejemplo.com/software.zip"
$silentArgs = "/S"
# ====================================
$zipPath = "$env:TEMP\software_installer.zip"
$extractPath = "$env:TEMP\SoftwareInstall"
# Verificar si ya está instalado (por nombre en el Registro)
$installed = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" `
-ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like "*$softwareName*" }
if ($installed) {
Write-Host "$softwareName ya está instalado. No se realizará ninguna acción." -ForegroundColor Yellow
exit 0
}
# Descargar el archivo ZIP
Write-Host "Descargando $softwareName desde: $zipUrl" -ForegroundColor Cyan
Invoke-WebRequest -Uri $zipUrl -OutFile $zipPath
if (-Not (Test-Path $zipPath)) {
Write-Error "Error al descargar el archivo ZIP."
exit 1
}
# Crear carpeta de extracción
if (Test-Path $extractPath) { Remove-Item -Recurse -Force $extractPath }
New-Item -ItemType Directory -Path $extractPath | Out-Null
# Extraer ZIP
Write-Host "Extrayendo instalador..." -ForegroundColor Cyan
Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force
# Buscar instalador (primer .exe en el ZIP)
$installer = Get-ChildItem -Path $extractPath -Filter "*.exe" -Recurse | Select-Object -First 1
if (-Not $installer) {
Write-Error "No se encontró un archivo .exe para instalar."
exit 1
}
# Ejecutar el instalador de forma silenciosa
Write-Host "Instalando $softwareName en modo silencioso..." -ForegroundColor Cyan
Start-Process -FilePath $installer.FullName -ArgumentList $silentArgs -Wait -Verb RunAs
# Limpiar
Remove-Item -Path $zipPath -Force
Remove-Item -Path $extractPath -Recurse -Force
Write-Host "$softwareName instalado correctamente." -ForegroundColor Green
Notas adicionales
- El script busca el primer
.exe
dentro del ZIP. Si hay varios instaladores o uno específico con nombre complejo, puedes modificar esa parte. - El parámetro
/S
puede cambiar según el software. Otros comunes:/quiet
,/silent
,/qn
(para MSI). - Si el software es de 32 bits y estás en sistema de 64 bits, también revisa esta clave:
HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\