Icono del sitio Binario 0

Script PowerShell para Instalar Software desde ZIP (Sólo si No Está Instalado)

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

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:

Requisitos

Antes de usar este script:

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

HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
Salir de la versión móvil