Generador de scripts PowerShell

Genera scripts PowerShell listos para auditar AD, servicios, discos, eventos y backups en Windows Server.

toolboox.app/herramientas/powershell-generator

Herramienta

script.ps1

Qué problema resuelve

Recordar la sintaxis de Get-CimInstance, Get-WinEvent o los filtros de AD cuesta más que la propia tarea.

PowerShell es el lenguaje de scripting predeterminado para administrar Windows Server, Active Directory, Microsoft 365 y Azure, con una sintaxis basada en verbos y sustantivos (Get-Process, Set-Item) que lo hace más predecible que Bash pero también más verboso al escribirlo de memoria. Este generador de scripts PowerShell produce comandos listos para tareas habituales de administración de sistemas: gestión de servicios, usuarios, archivos y tareas programadas, con la sintaxis correcta y los parámetros más usados en producción.

La convención Verbo-Sustantivo y por qué existe

Todo cmdlet de PowerShell sigue el patrón Verbo-Sustantivo, como Get-Service, Stop-Process o New-Item. Los verbos están estandarizados por Microsoft en una lista cerrada (Get, Set, New, Remove, Start, Stop, Restart, Test...) precisamente para que un administrador pueda adivinar el nombre de un cmdlet sin consultar la documentación: si existe Get-ADUser para leer un usuario de Active Directory, es razonable esperar que exista Set-ADUser y New-ADUser con parámetros similares.

El pipeline de objetos, no de texto

La diferencia fundamental entre PowerShell y Bash es que el pipeline de PowerShell transmite objetos .NET completos entre comandos, no texto plano. Get-Process | Where-Object {$_.CPU -gt 100} | Sort-Object CPU -Descending filtra y ordena procesos por su propiedad CPU real, sin necesidad de parsear columnas de texto como haría ps aux | awk. Esto elimina una clase entera de errores de parsing frágil que sí ocurren en scripts Bash cuando cambia el formato de salida de un comando.

Ejecución remota con PowerShell Remoting (WinRM)

Invoke-Command -ComputerName servidor01 -ScriptBlock { Get-Service } ejecuta código en un equipo remoto usando WinRM (Windows Remote Management) sobre HTTPS en el puerto 5986 o HTTP en el 5985. Para administrar varios servidores a la vez, Invoke-Command acepta una lista de nombres y ejecuta el bloque en paralelo, devolviendo los resultados etiquetados con el nombre de cada máquina de origen, ideal para auditorías rápidas de un parque de servidores.

Políticas de ejecución (Execution Policy) y por qué frenan tus scripts

Por defecto, Windows bloquea la ejecución de scripts .ps1 con la política Restricted. Cambiarla a RemoteSigned (permite scripts locales sin firmar pero exige firma en los descargados de Internet) es el equilibrio recomendado para la mayoría de entornos: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Nunca uses Unrestricted en un servidor de producción: elimina una capa de protección contra scripts maliciosos descargados accidentalmente.

Gestión de usuarios, servicios y tareas programadas

Cmdlets como New-LocalUser, Add-LocalGroupMember, Restart-Service -Force y Register-ScheduledTask cubren la mayoría de tareas rutinarias de administración de un servidor Windows. El módulo ActiveDirectory añade Get-ADUser, Set-ADAccountPassword y Disable-ADAccount para gestionar cuentas de dominio, y requiere las RSAT (Remote Server Administration Tools) instaladas en la máquina desde la que se ejecuta.

Manejo de errores y buenas prácticas en scripts de producción

Un script robusto declara $ErrorActionPreference = 'Stop' para que cualquier error termine el bloque en lugar de continuar silenciosamente, y envuelve las operaciones críticas en try/catch/finally. Usa Write-Verbose y Write-Error en lugar de Write-Host para que la salida sea filtrable y registrable por sistemas de logging centralizados, y firma digitalmente los scripts que se distribuyan a varios servidores para cumplir políticas de seguridad corporativas.

Casos de uso comunes

  • Automatizar la creación masiva de usuarios de Active Directory desde un CSV.
  • Reiniciar un conjunto de servicios en varios servidores remotos con Invoke-Command.
  • Programar tareas de mantenimiento con Register-ScheduledTask en lugar del Programador de tareas gráfico.
  • Auditar procesos y consumo de CPU/memoria en un parque de servidores Windows.
  • Generar reportes de estado de servicios críticos para enviar por correo automáticamente.

Buenas prácticas

  • Usa RemoteSigned como Execution Policy en lugar de Unrestricted en servidores de producción.
  • Declara $ErrorActionPreference = 'Stop' y usa try/catch en scripts críticos.
  • Prefiere Write-Verbose y Write-Error sobre Write-Host para salida filtrable y registrable.
  • Firma digitalmente los scripts que se distribuyan a múltiples servidores.
  • Usa el pipeline de objetos con Where-Object y Select-Object en lugar de parsear texto manualmente.

Preguntas frecuentes

¿Necesito el módulo ActiveDirectory?

Solo para la plantilla de usuarios AD. Instálalo con Install-WindowsFeature RSAT-AD-PowerShell en Windows Server.

¿Se ejecuta el script aquí?

No, solo se genera el texto en tu navegador. Revísalo y ejecútalo tú en el equipo destino.