Icono del sitio Binario 0

Script PowerShell para Instalar Software desde Archivos Comprimidos o .MSI (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 automatizamos la instalación de software en Windows, puede ser necesario trabajar con distintos formatos de distribución: .zip, .msi, .7z, .rar, etc. Este artículo presenta un script PowerShell flexible que:

Verifica si el software ya está instalado.
Descarga automáticamente el archivo comprimido o el instalador.
Extrae si es necesario (.zip, .rar, .7z).
Ejecuta la instalación en modo silencioso.
Limpia los archivos temporales.

Formatos soportados

Este script soporta los siguientes formatos de instalación:

Variables personalizables

Para usar el script, debes editar las siguientes variables:

$softwareName = "NombreDelSoftware"                  # Nombre del software en el registro de Windows
$downloadUrl = "https://ejemplo.com/archivo.7z" # URL directa del archivo a descargar
$silentArgs = "/quiet" # Argumentos para instalación silenciosa (por tipo)

Requisitos

Script PowerShell Generalizado

# === PERSONALIZAR ESTAS VARIABLES ===
$softwareName = "NombreDelSoftware"
$downloadUrl = "https://ejemplo.com/archivo.7z"
$silentArgs = "/quiet" # Para .msi usa /quiet, para .exe normalmente /S
# =====================================

# Rutas temporales
$fileName = [System.IO.Path]::GetFileName($downloadUrl)
$tempFile = "$env:TEMP\$fileName"
$extractPath = "$env:TEMP\SoftwareInstall"

# Comprobación previa: ¿Ya está instalado?
$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
Write-Host "Descargando $softwareName desde: $downloadUrl" -ForegroundColor Cyan
Invoke-WebRequest -Uri $downloadUrl -OutFile $tempFile

if (-Not (Test-Path $tempFile)) {
Write-Error "Error al descargar el archivo."
exit 1
}

# Detectar extensión
$ext = [System.IO.Path]::GetExtension($tempFile).ToLower()

# Crear carpeta de extracción
if (Test-Path $extractPath) { Remove-Item $extractPath -Recurse -Force }
New-Item -ItemType Directory -Path $extractPath | Out-Null

# Función para buscar el primer instalador (.exe o .msi)
function Find-Installer($path) {
return Get-ChildItem -Path $path -Recurse -Include *.exe, *.msi | Select-Object -First 1
}

# Procesar por tipo de archivo
switch ($ext) {
".msi" {
Write-Host "Instalando archivo MSI..." -ForegroundColor Cyan
Start-Process "msiexec.exe" -ArgumentList "/i `"$tempFile`" $silentArgs" -Wait -Verb RunAs
}
".zip" {
Expand-Archive -Path $tempFile -DestinationPath $extractPath -Force
$installer = Find-Installer $extractPath
if ($installer) {
Start-Process -FilePath $installer.FullName -ArgumentList $silentArgs -Wait -Verb RunAs
} else {
Write-Error "No se encontró instalador dentro del ZIP."
}
}
".7z" | ".rar" {
# Requiere 7-Zip instalado
$sevenZip = "${env:ProgramFiles}\7-Zip\7z.exe"
if (-Not (Test-Path $sevenZip)) {
Write-Error "7-Zip no está instalado en $sevenZip."
exit 1
}
& $sevenZip x $tempFile -o"$extractPath" -y | Out-Null
$installer = Find-Installer $extractPath
if ($installer) {
Start-Process -FilePath $installer.FullName -ArgumentList $silentArgs -Wait -Verb RunAs
} else {
Write-Error "No se encontró instalador en el archivo extraído."
}
}
default {
Write-Error "Formato de archivo no soportado: $ext"
exit 1
}
}

# Limpieza de archivos temporales
Remove-Item $tempFile -Force
Remove-Item $extractPath -Recurse -Force

Write-Host "Instalación de $softwareName completada." -ForegroundColor Green

¿Cómo funciona?

  1. Comprueba si está instalado buscando el nombre en el registro.
  2. Descarga el archivo desde una URL.
  3. Detecta el tipo de archivo (.zip, .msi, .7z, .rar).
  4. Extrae o ejecuta directamente el instalador.
  5. Instala en modo silencioso con los argumentos definidos.
  6. Limpia archivos temporales.

Consejos útiles

Salir de la versión móvil