Introducción a PowerShell

Encuentra el código de la lección:

Abstract

Esta lección introduce el concepto de scripting como una forma práctica de automatizar tareas repetitivas y construir herramientas reutilizables. Presenta PowerShell 7+ como lenguaje común en Windows, macOS y Linux, destacando su pipeline de objetos y su capacidad para simplificar flujos sin depender de utilidades externas.

También aprenderás a crear una estructura base de trabajo —tu workspace— y a aplicar buenas prácticas como el uso de Join-Path para rutas portables y la preferencia por comandos explícitos en lugar de aliases. Este será el punto de partida para escribir scripts claros, seguros y mantenibles.

Scripting con PowerShell

¿Qué es scripting?

Por scripting entendemos la práctica de escribir pequeños programas destinados a automatizar tareas repetitivas. A diferencia de una aplicación completa, un script suele ser breve, orientado a ejecutar comandos del sistema, manipular archivos o coordinar herramientas ya existentes. Su valor está en reducir pasos manuales y hacer procesos repetibles y confiables.

Una ventaja importante de los lenguajes de scripting frente a los lenguajes de propósito general es que, al tener un alcance más acotado, ofrecen una sintaxis más simple y una librería estándar especializada en automatización y manipulación del entorno. Esto permite escribir soluciones concisas sin necesidad de definir estructuras o configuraciones complejas.

En este curso utilizaremos PowerShell 7+ como lenguaje de scripting único en Windows, macOS y Linux. Esta decisión simplifica el material, elimina distracciones y te permite concentrarte en lo esencial: automatizar y construir con las mismas herramientas en cualquier sistema operativo.

¿Por qué elegimos PowerShell?

Adoptar un solo lenguaje para todo el curso reduce la carga cognitiva y facilita el mantenimiento del material: solo debemos actualizar ejemplos y explicaciones de PowerShell.

  • Multiplataforma: PowerShell 7+ funciona en Windows, macOS y Linux. Un único lenguaje para todos los ejemplos y ejercicios del curso.
  • Más expresivo en este contexto: su pipeline pasa objetos 1   fuertemente tipados (no solo texto), lo que facilita filtrar, ordenar y transformar datos sin depender de múltiples utilidades externas.
  • Más simple: muchas tareas comunes (JSON, XML, archivos, procesos) están cubiertas por cmdlets 2 y tipos .NET integrados, reduciendo dependencias y evitando el trabajo manual de conexión típico de otros entornos (como parsear texto o encadenar utilidades).
  • Enfoque y coherencia: un único lenguaje implica una sola ruta de instalación, una sola sintaxis y ejemplos consistentes a lo largo de todo el curso.

Importante

PowerShell no es un reemplazo absoluto de Bash. Ambos son entornos de scripting potentes con filosofías distintas. La elección entre uno u otro depende siempre del contexto y de las necesidades específicas. En este curso priorizamos PowerShell por su carácter multiplataforma y expresividad, pero Bash sigue siendo la herramienta estándar en muchos entornos Unix.

Estructura base del “workspace”

Comencemos creando una organización básica para los proyectos del curso. Esta carpeta puede compartirse entre varios proyectos; si decides no usarla, solo tendrás que adaptar las rutas en los comandos posteriores.

Este puede ser tu primer contacto con PowerShell. Haremos un repaso mínimo de su sintaxis, asumiendo que ya conoces conceptos generales como condicionales, bucles, funciones y objetos.

Desde la terminal de PowerShell
$scriptsPath = "dibs/scripts"

New-Item -ItemType Directory -Path $scriptsPath | Out-Null

¿Qué acabamos de hacer?

  • Asignación con $nombre = 'valor' . Las variables comienzan con $ y pueden almacenar strings, números u objetos.
  • Pipelines en PowerShell: el operador | pasa objetos al siguiente comando. Aquí usamos | Out-Null para descartar la salida y mantener la terminal limpia.

    Alternativas

    También se puede suprimir la salida con (comando) >$null o $null = (comando) . Si bien no significan exactamente lo mismo, todos logran el mismo efecto de no mostrar salida en la terminal.

    Otras formas de suprimir salida
    New-Item -ItemType Directory -Path $scriptsPath >$null
    $null = New-Item -ItemType Directory -Path $scriptsPath

Rutas portables con Join-Path

En scripts, preferimos Join-Path para construir rutas de forma portable (evita concatenar strings con \ o /). Por ejemplo:

$scriptsPath = Join-Path 'dibs' 'scripts'
Join-Path construirá dibs/scripts o dibs\scripts según el sistema operativo.

En la terminal mantendremos los ejemplos simples y no usaremos Join-Path para no sobrecargar la sintaxis; pero en archivos .ps1 sí lo usaremos por claridad y portabilidad.

Aliases

PowerShell incluye aliases que hacen que la experiencia sea más parecida a Bash o CMD (por ejemplo, cat en lugar de Get-Content ). Son útiles para escribir rápido en la terminal, pero no los usaremos en este apunte porque en scripts y documentación las formas completas son más claras, predecibles y fáciles de leer.

Compatibilidad entre sistemas

Los aliases pueden variar entre sistemas operativos: algunos están disponibles solo en Windows o solo en macOS/Linux. Por eso, confiar en ellos puede hacer que un script funcione en una plataforma pero falle en otra.
Desde la terminal
Get-Alias -Definition Set-Location
Inspeccionando aliases de Set-Location

En este caso, Set-Location (que cambia el directorio actual) tiene dos aliases disponibles:

Output
CommandType     Name                  Version    Source
-----------     ----                  -------    ------
Alias           chdir -> Set-Location
Alias           sl    -> Set-Location

Conclusiones

En esta lección diste tus primeros pasos en el uso de PowerShell 7+ como lenguaje de scripting multiplataforma. Comprendiste qué significa automatizar con scripts, por qué PowerShell resulta especialmente expresivo para ese propósito y cómo establecer una estructura base de trabajo coherente y reutilizable. Además, exploraste conceptos fundamentales como las pipelines orientadas a objetos, la asignación de variables y el uso de Join-Path para mantener la portabilidad entre sistemas.

Puntos clave

  • Automatizar es transformar tareas repetitivas en procesos reproducibles, seguros y fáciles de mantener.
  • PowerShell 7+ unifica la experiencia de scripting en Windows, macOS y Linux con una pipeline de objetos.
  • La sintaxis simple y los cmdlets integrados permiten crear scripts expresivos sin dependencias externas.
  • Una estructura clara de carpetas y el uso de Join-Path sientan la base para proyectos portables y mantenibles.

¿Qué nos llevamos?

Todo comienza con un paso pequeño: decidir que una tarea no merece repetirse manualmente. Convertirla en un script no solo ahorra tiempo, también captura conocimiento y lo vuelve compartible.

A medida que avances, intenta pensar cada acción como parte de un flujo automatizable. Esa mentalidad —más que dominar una sintaxis— es la que transforma comandos aislados en herramientas que escalan contigo y con tus proyectos.

¿Con ganas de más?

Referencias adicionales

  • Understanding PowerShell and basic string formatting en Microsoft Developer Blogs por Ed Wilson
    Un artículo introductorio sobre formateo de cadenas en PowerShell. Explica composite formatting de .NET (marcadores {0} , {1} , ...) y cómo aplicarlo con [string]::Format() y el operador -f , comparándola con las cadenas expandibles ( "..." ). Incluye ejemplos simples con uno y varios marcadores, y comenta ventajas, límites de legibilidad y cuándo preferir cada enfoque (interpolación para casos triviales; composite formatting para formatos más complejos). Ideal para quien quiera aclarar “qué usar y por qué” al dar formato a texto en PowerShell.

Notas

  1. A diferencia de los shells tradicionales, PowerShell trata todo como objetos de .NET. Esto habilita capacidades como composición, herencia, manejo de excepciones y tipado más estricto, lo que acerca la experiencia a la de un lenguaje de programación completo. Además, permite cierto nivel de compatibilidad con C#, lo que facilita integrar scripts con bibliotecas y funcionalidades del ecosistema .NET para resolver tareas más complejas. Volver
  2. Un cmdlet es un comando ligero de PowerShell diseñado para realizar una única tarea bien definida. Suelen seguir la convención Verbo-Sustantivo (por ejemplo, Get-Process o New-Item ), lo que los hace más expresivos y fáciles de entender que muchos comandos en Bash. A diferencia de los ejecutables tradicionales, los cmdlets devuelven objetos .NET, lo que permite combinarlos en pipelines potentes y consistentes. Volver