Si ya conoces n8n como herramienta de automatización y también manejas PowerShell para administrar sistemas Windows, combinarlos es el siguiente nivel. En este artículo veremos cómo usar n8n para orquestar scripts de PowerShell de forma visual, programada y sin intervención manual.
¿Por qué combinar n8n con PowerShell?
n8n es una plataforma de automatización de flujos de trabajo open source (ya hablamos de sus agentes IA en un artículo anterior). PowerShell es el lenguaje de scripting por excelencia en entornos Windows. Juntos permiten:
- Ejecutar scripts de forma programada sin depender del Programador de tareas de Windows
- Encadenar acciones: ejecutar un script, procesar su salida y enviar el resultado por email o Slack
- Centralizar la automatización de múltiples servidores desde un único panel
- Añadir condiciones y bifurcaciones visuales sin tocar el código PowerShell
Instalación rápida de n8n (si aún no lo tienes)
La forma más sencilla es con Docker:
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
n8nio/n8n
O con npm si prefieres instalación directa:
npm install n8n -g
n8n start
Accede desde el navegador en http://localhost:5678.
Nodo Execute Command: el puente con PowerShell
n8n incluye el nodo Execute Command que permite ejecutar comandos del sistema operativo directamente. Para PowerShell:
Configuración básica del nodo
En el campo Command del nodo, escribe:
powershell.exe -NonInteractive -ExecutionPolicy Bypass -File "C:\Scripts\mi-script.ps1"
O para comandos cortos directamente inline:
powershell.exe -Command "Get-Service | Where-Object {$_.Status -eq 'Stopped'} | ConvertTo-Json"
Tip: Usa
-NonInteractivesiempre en automatizaciones para evitar que el script quede bloqueado esperando input del usuario.
Flujo práctico 1: Informe diario de servicios detenidos
Este flujo ejecuta un script cada mañana, detecta servicios detenidos en el servidor y envía un email con el informe.
Nodos del flujo:
1. Cron → Se dispara cada día a las 7:00
2. Execute Command → Ejecuta el script PowerShell
3. IF → Comprueba si hay servicios detenidos
4. Send Email (Gmail/SMTP) → Envía el informe solo si hay problemas
Script PowerShell (check-services.ps1):
$serviciosDetenidos = Get-Service | Where-Object {
$_.StartType -eq "Automatic" -and $_.Status -eq "Stopped"
}
if ($serviciosDetenidos.Count -gt 0) {
$resultado = $serviciosDetenidos | Select-Object Name, DisplayName, Status |
ConvertTo-Json -Compress
Write-Output $resultado
} else {
Write-Output '{"ok": true, "message": "Todos los servicios automáticos están activos"}'
}
En n8n, la salida del script llega como JSON y puedes acceder a sus campos con {{ $json.Name }} en los nodos siguientes.
Flujo práctico 2: Limpieza automática de archivos temporales
Flujo:
1. Cron → Cada domingo a las 2:00 AM
2. Execute Command → Script de limpieza
3. HTTP Request → Notifica a un webhook de Slack o Teams
Script PowerShell (cleanup.ps1):
param(
[string]$RutaTemp = "C:\Windows\Temp",
[int]$DiasAntiguedad = 7
)
$fecha = (Get-Date).AddDays(-$DiasAntiguedad)
$archivos = Get-ChildItem -Path $RutaTemp -Recurse -ErrorAction SilentlyContinue |
Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $fecha }
$totalMB = [math]::Round(($archivos | Measure-Object -Property Length -Sum).Sum / 1MB, 2)
$archivos | Remove-Item -Force -ErrorAction SilentlyContinue
@{
archivosEliminados = $archivos.Count
espacioLiberadoMB = $totalMB
fecha = (Get-Date -Format "yyyy-MM-dd HH:mm")
} | ConvertTo-Json
n8n recibe el JSON con el número de archivos eliminados y el espacio liberado, y lo envía como notificación.
Flujo práctico 3: Trigger por evento (webhook)
También puedes lanzar scripts PowerShell bajo demanda desde cualquier sistema externo usando el nodo Webhook de n8n:
1. Webhook → Recibe una petición POST con {"servidor": "SRV01", "accion": "reiniciar-servicio", "servicio": "Spooler"}
2. Execute Command → Ejecuta el script con los parámetros recibidos
3. Respond to Webhook → Devuelve el resultado
param([string]$Servicio)
Restart-Service -Name $Servicio -Force
$estado = (Get-Service -Name $Servicio).Status
Write-Output "{"servicio": "$Servicio", "estado": "$estado"}"
Así cualquier sistema (Zabbix, Grafana, una app web) puede disparar acciones en tus servidores Windows de forma controlada y auditada.
Seguridad y buenas prácticas
- Ejecuta n8n en una red interna o tras autenticación si vas a exponer webhooks
- Usa cuentas de servicio con permisos mínimos para ejecutar los scripts, no el administrador
- Registra la salida de cada ejecución en n8n: el historial de ejecuciones guarda inputs y outputs automáticamente
- Valida los parámetros de entrada en los scripts antes de usarlos en comandos para evitar inyecciones
Conclusión
La combinación de n8n y PowerShell elimina la fricción entre la automatización visual y la potencia de scripting de Windows. Puedes monitorizar servidores, lanzar tareas de mantenimiento, responder a eventos y recibir notificaciones, todo desde un flujo visual sin necesidad de programar schedulers complejos ni depender exclusivamente del Programador de tareas.
Si ya tienes n8n corriendo en tu entorno, el siguiente paso es identificar qué scripts de PowerShell ejecutas manualmente de forma repetitiva: esos son tus mejores candidatos para automatizar hoy mismo.
¿Tienes algún flujo de n8n + PowerShell que uses en producción? Compártelo en los comentarios.
