Qué es PowerShell y para qué sirve
PowerShell es un marco de automatización de tareas y un shell de línea de comandos desarrollado por Microsoft. Está construido sobre la plataforma .NET y permite a los administradores de sistemas, desarrolladores y usuarios avanzados ejecutar comandos, crear scripts y gestionar configuraciones tanto en sistemas Windows como en entornos multiplataforma. A diferencia de los shells tradicionales que trabajan con texto, PowerShell opera con objetos, lo que facilita la manipulación de datos complejos y la integración con otras aplicaciones. Su sintaxis es clara y coherente, y ofrece cientos de cmdlets (comandos nativos) que cubren desde la administración del sistema hasta la gestión de Active Directory, servicios en la nube y más.
PowerShell no es solo un intérprete de comandos; es un lenguaje de scripting completo que incluye variables, bucles, condicionales y funciones. Los scripts de PowerShell se guardan con la extensión .ps1 y pueden ejecutarse de manera segura gracias a las políticas de ejecución que controlan qué scripts pueden correr en un equipo. Desde su lanzamiento original en 2006, PowerShell ha evolucionado hasta convertirse en una herramienta esencial para cualquier profesional de TI. En 2016, Microsoft liberó el código fuente bajo licencia MIT, dando lugar a PowerShell Core, que funciona en Windows, Linux y macOS.
Características principales de PowerShell
Entre las características más destacadas de PowerShell se encuentra su capacidad para trabajar con objetos. Cada cmdlet genera objetos .NET que pueden ser enviados a través de tuberías (pipeline) a otros cmdlets, lo que permite encadenar operaciones complejas con una sola línea de código. Por ejemplo, se puede obtener la lista de procesos, filtrarlos por consumo de memoria y formatear la salida sin necesidad de herramientas externas. Además, PowerShell admite alias para comandos comunes, lo que facilita la transición desde otros shells como cmd.exe o Bash.

Otra característica importante son las sesiones remotas. PowerShell permite ejecutar comandos en equipos remotos mediante WinRM (Windows Remote Management), lo que resulta fundamental para la administración centralizada de servidores y estaciones de trabajo. También incluye un entorno de scripting integrado (ISE) y, en versiones modernas, Visual Studio Code con extensiones específicas para desarrollar y depurar scripts. La documentación está siempre accesible a través del cmdlet Get-Help, que muestra ejemplos y descripciones detalladas de cada comando.
Comandos básicos de PowerShell
Para comenzar a trabajar con PowerShell es esencial conocer los cmdlets más utilizados. A continuación se presenta una lista de algunos comandos fundamentales que todo usuario debería dominar:
- Get-Help: muestra ayuda sobre cualquier cmdlet o concepto.
- Get-Process: obtiene una lista de los procesos en ejecución.
- Get-Service: consulta el estado de los servicios del sistema.
- Set-Location: cambia el directorio de trabajo, similar a cd.
- Get-ChildItem: lista archivos y carpetas del directorio actual.
- Get-EventLog: accede a los registros de eventos de Windows.
- Get-ADUser: consulta usuarios de Active Directory (requiere módulo RSAT).
- Set-ExecutionPolicy: define la política de ejecución de scripts.
Estos cmdlets forman la base para la administración diaria. La sintaxis sigue el patrón Verbo-Sustantivo, lo que hace que su función sea intuitiva. Por ejemplo, Get-Process obtiene procesos, Stop-Service detiene servicios y New-Item crea archivos o carpetas. Además, se pueden usar alias como `ls` para Get-ChildItem o `ps` para Get-Process, aunque es recomendable aprender los nombres completos para mejorar la legibilidad en scripts.

Estructuras de control y scripting en PowerShell
PowerShell incluye todas las estructuras de control típicas de un lenguaje de programación. Se pueden usar bucles `for`, `foreach`, `while` y `do-while`, así como condicionales `if`, `elseif` y `switch`. Las variables se definen con el símbolo `$` y pueden almacenar cualquier tipo de objeto. Por ejemplo, es posible guardar la fecha actual en una variable y luego usarla en filtros. A continuación se muestra un ejemplo práctico que obtiene usuarios de Active Directory creados en los últimos siete días:
`$Fecha = (Get-Date).AddDays(-7)`
`Get-ADUser -Filter {whenCreated -ge $Fecha} -Properties Name,Enabled,whenCreated`
Este script utiliza Get-Date para obtener la fecha actual, resta siete días con AddDays y luego filtra los usuarios cuya propiedad whenCreated sea mayor o igual a esa fecha. Los cmdlets de Active Directory, como Get-ADUser y Get-ADComputer, son esenciales para entornos corporativos que dependen de este servicio de directorio. Para usarlos, es necesario tener instalados los módulos RSAT o ejecutarlos en un controlador de dominio.

Tabla de cmdlets comunes y su descripción
Para facilitar la consulta, se incluye una tabla con algunos de los cmdlets más utilizados en tareas de administración:
| Cmdlet | Función | Ejemplo de uso |
|---|---|---|
| Get-Service | Obtiene el estado de los servicios del sistema. | Get-Service -Name Spooler |
| Get-Process | Lista los procesos en ejecución y sus propiedades. | Get-Process -Name notepad |
| Get-EventLog | Recupera entradas de registros de eventos. | Get-EventLog -LogName System -Newest 10 |
| Set-ExecutionPolicy | Define la política de ejecución de scripts. | Set-ExecutionPolicy RemoteSigned |
| Get-ADUser | Consulta usuarios en Active Directory. | Get-ADUser -Filter {Name -like "*admin*"} |
Esta tabla muestra solo una pequeña parte del ecosistema de cmdlets. La mayoría de ellos aceptan parámetros adicionales para filtrar, ordenar o dar formato a la salida. La documentación oficial de Microsoft es la mejor fuente para explorar todas las posibilidades. Para profundizar en los cmdlets de Active Directory, se puede consultar la documentación de Microsoft sobre el módulo ActiveDirectory.
Seguridad y políticas de ejecución
PowerShell implementa un sistema de seguridad basado en políticas de ejecución. Estas políticas determinan si los scripts pueden ejecutarse y, en tal caso, si deben estar firmados digitalmente. Los niveles principales son: Restricted (no se ejecutan scripts), AllSigned (solo scripts firmados por un editor de confianza), RemoteSigned (scripts locales sin firma, scripts remotos deben estar firmados) y Unrestricted (todos los scripts se ejecutan, aunque se advierte al usuario). Es común que los administradores configuren RemoteSigned para entornos de producción.

Además, PowerShell incluye un registro de ejecución que permite auditar el uso de comandos y scripts. Los scripts descargados de Internet pueden tener bloqueado su contenido; para desbloquearlos se usa el cmdlet Unblock-File. Estas medidas buscan evitar la ejecución accidental de código malicioso. Para más información sobre las políticas de ejecución, se recomienda visitar la página de Wikipedia sobre PowerShell, donde se explica su evolución y características de seguridad.
Historia y evolución de PowerShell
PowerShell nació en 2003 con el nombre en clave Monad, desarrollado por Jeffrey Snover. En 2006 se lanzó oficialmente como Windows PowerShell 1.0. Su adopción fue creciendo rápidamente entre los profesionales de TI, quienes encontraron en el shell basado en objetos una alternativa potente a los scripts tradicionales en VBScript o cmd batch. En 2016, Microsoft tomó la decisión de abrir el código fuente y lanzar PowerShell Core bajo licencia MIT, disponible en GitHub. Esto permitió que PowerShell funcionara en Linux y macOS, ampliando su alcance a administradores de sistemas heterogéneos.
La versión actual, PowerShell 7, está basada en .NET Core y combina la estabilidad de Windows PowerShell con nuevas características como paralelismo, operadores ternarios y compatibilidad con comandos nativos de otros shells. La comunidad de código abierto contribuye activamente al proyecto, que se aloja en GitHub. Esta evolución ha consolidado a PowerShell como una herramienta indispensable para la automatización en entornos Windows, Azure y ahora también en entornos Linux.

Referencias
Microsoft Learn. PowerShell Overview.
https://learn.microsoft.com/es-es/powershell/
IONOS. Top 40 PowerShell Cmdlets.
https://www.ionos.es/digitalguide/servidores/configuracion/comandos-de-powershell/
Wikipedia. PowerShell.
https://es.wikipedia.org/wiki/PowerShell
Microsoft Learn. Active Directory Cmdlets.
https://learn.microsoft.com/es-es/powershell/module/activedirectory/
GitHub. PowerShell Repository.
https://github.com/PowerShell/PowerShell





