miércoles, 17 de septiembre de 2025

Windows. PS. Como instalar masivamente-remotamente un programa en red.

Como instalar un programa remoto en PS.


Desde la descarga hasta su instalación y verificación.

En este caso vamos a poner un ejemplo de como instalar el cliente de Wazuh en una red de servidores con comandos de PS.

La idea es desde un servidor central (Servidor1) lanzar la instalación del programa en varios servidores remotos.

Solo necesitaremos lanzar el script desde un servidor abriendo una consola de Powershell

Necesitaremos antes algunos preparativos previos:

Preparativo 1: Preparamos el script que se ejecutará en los servidores locales

Preparativo 2: Preparamos el script que se lanzará la instalación a los servidores remotos

Preparativo 3: Prepararemos el listado de host a los que instalaremos el programa.

Paso 1: Ejecutamos el proceso


Preparativo 1: Preparamos el script que se ejecutará en los servidores locales


Se debe copiar en una ruta donde todos los hosts tengan acceso, en este ejemplo la dejaremos en:

\\Domain.local\SYSVOL\Domain.LOCAL\MovApp\SIEM\Wazuh_agent_4.12.ps1

FICHERO: SIEM\Wazuh_agent_4.12.ps1

# PowerShell Script

 

# --- Guard clause: salir si Wazuh ya está instalado ---

$svc = Get-Service -Name 'WazuhSvc' -ErrorAction SilentlyContinue

$agentDir = "${env:ProgramFiles(x86)}\ossec-agent"

 

if ($svc -or (Test-Path "$agentDir\client.keys")) {

    Write-Output "Wazuh Agent ya instalado. Saliendo."

    exit 0

}

# --- fin guard clause ---

 

# PowerShell Script

 

# Define el nombre del host

$hostname = [System.Net.Dns]::GetHostName()

 

# Descarga el instalador del agente Wazuh de la web del fabricante

Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.12.0-1.msi -OutFile $env:tmp\wazuh-agent;

 

# Instala el agente Wazuh con el nombre del host como el nombre del agente

msiexec.exe /i $env:tmp\wazuh-agent /q WAZUH_MANAGER='192.168.x.x' WAZUH_AGENT_GROUP='default' WAZUH_AGENT_NAME=$hostname

 

#Pausa de 10 segundos antes de iniciar el servicio

Start-Sleep -Seconds 10

 

Write-Host " Inicializamos el servicio1. Puede dar error "

NET START WazuhSvc

Write-Host " Inicializamos el servicio2 "

Start-Sleep -Seconds 10

Start-Service -Name "WazuhSvc"

Set-Service -Name "WazuhSvc" -StartupType Automatic

#Fin de Servicio instalado

 

#ejecución remota de executable

 

Start-Sleep -Seconds 5

Write-Host "Intento de conexión con el servidor Wazuh..."

 

$exePath = "C:\Program Files (x86)\ossec-agent\agent-auth.exe"

 

# Desbloquear el ejecutable si fue descargado

Unblock-File -Path $exePath

 

# Ejecutar el agente con argumentos

Start-Process -FilePath $exePath -ArgumentList "-m 10.115.79.215" -Wait -NoNewWindow

 

Write-Host "Verifica el servio instalado"

$svc = Get-Service -Name 'WazuhSvc' -ErrorAction SilentlyContinue

$agentDir = "${env:ProgramFiles(x86)}\ossec-agent"

 

if ($svc -or (Test-Path "$agentDir\client.keys")) {

    Write-Output "Verifica Wazuh Agent -> instalado OK. Saliendo."

  

}

# --- fin guard clause ---

 

 

Preparativo 2: Preparamos el script que se lanzará la instalación a los servidores remotos


Este es el único script que ejecutaremos.

FICHERO: InstallRemoto.ps1 

# Ruta al archivo de servidores

$servidores = Get-Content "servidores.txt"

 

# Ruta del script a copier, en una ruta donde accedan todos los hosts

$scriptPath = \\YYYYY.local\SYSVOL\XXXX.LOCAL\MovApp\SIEM\Wazuh_agent_4.12.ps1

 

foreach ($serverName in $servidores) {

    Write-Host " Iniciando despliegue en ${serverName}..." -ForegroundColor Cyan

 

    try {

        # Crear sesión remota con credenciales actuales

        $session = New-PSSession -ComputerName $serverName

 

        # Crear carpeta en remoto

        Invoke-Command -Session $session -ScriptBlock {

            $folder = "C:\tmp"

            if (-Not (Test-Path $folder)) {

                New-Item -Path $folder -ItemType Directory

            }

        }

 

        # Copiar el script al servidor remoto usando ruta UNC

        $remoteScriptPath = "\\${serverName}\C$\tmp\Wazuh_agent_4.12.ps1"

        Copy-Item -Path $scriptPath -Destination $remoteScriptPath

 

        # Ejecutar el script en remoto

        Invoke-Command -Session $session -ScriptBlock {

            & "C:\tmp\Wazuh_agent_4.12.ps1"

        }

 

        Write-Host " Despliegue completado en ${serverName}" -ForegroundColor Green

    }

    catch {

        Write-Host " Error en el despliegue en ${serverName}: $_" -ForegroundColor Red

    }

    finally {

        # Cerrar sesión remota

        if ($session) {

            Remove-PSSession $session

        }

    }

}

 

Write-Host "Despliegue finalizado en todos los servidores." -ForegroundColor Yellow

 

 

 

Preparativo 3: Prepararemos el listado de host a los que instalaremos el programa.

Es muy importante que los nombres no tengan espacios en blanco

 Antes de la ejecución debemos crear el listado de servidores. Para ello usaremos el fichero servidores.txt, en este ejemplo pondremos dos host a ser receptores de la nueva instalación

 



Paso 1: Ejecutamos el proceso

 Conectarse a un DC y/o abrir una consola de PowerShell como administrador del dominio para que no tenga problemas a la hora de la ejecución local en los hosts de este dominio.


Yo por ejemplo estoy monitorizando con Nagios si se va levantado el servicio en mis servidores

by GoN | Published: Sep 2025 | Last Updated:

No hay comentarios: