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

- Link: https://binariocero.com/windows/script-powershell-para-instalar-software-desde-zip-solo-si-no-esta-instalado
- Published: 2025-06-07T15:20:38+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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**:

    ```wp-block-preformatted
    $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:

    ```wp-block-preformatted
    HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
    ```

Filtra por el nombre del software en el campo `DisplayName`.

## Script PowerShell Generalizado

    ```wp-block-preformatted
    # === 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 ZIPWrite-Host "Descargando $softwareName desde: $zipUrl" -ForegroundColor CyanInvoke-WebRequest -Uri $zipUrl -OutFile $zipPathif (-Not (Test-Path $zipPath)) {    Write-Error "Error al descargar el archivo ZIP."    exit 1}# Crear carpeta de extracciónif (Test-Path $extractPath) { Remove-Item -Recurse -Force $extractPath }New-Item -ItemType Directory -Path $extractPath | Out-Null# Extraer ZIPWrite-Host "Extrayendo instalador..." -ForegroundColor CyanExpand-Archive -Path $zipPath -DestinationPath $extractPath -Force# Buscar instalador (primer .exe en el ZIP)$installer = Get-ChildItem -Path $extractPath -Filter "*.exe" -Recurse | Select-Object -First 1if (-Not $installer) {    Write-Error "No se encontró un archivo .exe para instalar."    exit 1}# Ejecutar el instalador de forma silenciosaWrite-Host "Instalando $softwareName en modo silencioso..." -ForegroundColor CyanStart-Process -FilePath $installer.FullName -ArgumentList $silentArgs -Wait -Verb RunAs# LimpiarRemove-Item -Path $zipPath -ForceRemove-Item -Path $extractPath -Recurse -ForceWrite-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:

    ```wp-block-preformatted
    HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
    ```
