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:

viernes, 12 de septiembre de 2025

CISCO. Wifi Security. ISOLATION

Purpose

Isolate the elements of a Wi-Fi network from each other.


In Cisco-managed wireless environments (such as those using Wireless LAN Controllers, or WLCs), client isolation refers to preventing devices connected to the same wireless network from communicating directly with each other. This is typically achieved through features like:

  • P2P Blocking (Peer-to-Peer Blocking): Found in the advanced settings of a WLAN profile. When enabled (e.g., set to Drop), it blocks direct communication between WiFi clients connected to the same access point managed by the same WLC.

  • AP Isolation (common in consumer-grade or SMB routers): Prevents clients connected to the same access point from seeing or interacting with each other. This is useful in public or shared environments like cafés, hotels, or conferences, where you want to prevent attacks like ARP spoofing or traffic sniffing.

Steps

While there isn’t a literal command called ISOLATION, the effect is achieved through configurations such as:

  • P2P Blocking Action in the WLAN settings → can be set to Drop or Forward.

  • On switches, a similar effect is achieved using switchport protected, but in WiFi it’s handled at the SSID and controller level.

recommended for

  • In public or shared networks where clients shouldn’t interact.

  • In enterprise environments with strict security policies.

  • To protect IoT or smart devices that don’t need to communicate with each other.

by GoN | Published: Oct 2025 | Last Updated:

TOOLS. EXELS joins columns

 Excel Spanish version.


Purpose

Os pongo algunos ejemplo útiles para unificar información siguiendo diferentes criterios.


Exemples


Para unir los valores de la columna B cuando en la columna A aparece el texto "Submitted Data",:

=UNIRCADENAS(";" ; VERDADERO ; FILTRAR(B1:B100 ; ESNUMERO(HALLAR("Submitted Data" ; A1:A100))))

 

Para unir los valores de la columna B cuando en la columna A aparece el texto "Submitted Data" y en la columna D aparece "1-ESP",

=UNIRCADENAS(";" ; VERDADERO ; FILTRAR(B1:B100 ;(A1:A100="Submitted Data")*(D1:D100="1-ESP")))

 

Para unir los valores de la columna B cuando en la columna A NO aparezca el texto "Submitted Data"

=UNIRCADENAS(";" ; VERDADERO ; FILTRAR(B1:B100 ; A1:A100<>"Submitted Data"))

  

Para unir los valores de la columna B cuando en la columna A NO aparezca el texto "Submitted Data" y en la columna D aparezca "1-ESP"

=UNIRCADENAS(";" ; VERDADERO ; FILTRAR(B2:B1500 ;(A2:A1500<>"Submitted Data")*(D2:D1500="1-ESP")))


by GoN | Published: Oct 2025 | Last Updated: