Introducción a PowerShell
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 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.
Join-Path Join-Path
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
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.
$scriptsPath = "dibs/scripts"
New-Item -ItemType Directory -Path $scriptsPath | Out-Null ¿Qué acabamos de hacer?
- Asignación con
. Las variables comienzan con$nombre = 'valor'$nombre = 'valor'y pueden almacenar strings, números u objetos.$$ - Pipelines en PowerShell: el operador
pasa objetos al siguiente comando. Aquí usamos||para descartar la salida y mantener la terminal limpia.| Out-Null| Out-NullAlternativas
También se puede suprimir la salida con
o(comando) >$null(comando) >$null. Si bien no significan exactamente lo mismo, todos logran el mismo efecto de no mostrar salida en la terminal.$null = (comando)$null = (comando)Otras formas de suprimir salidaNew-Item -ItemType Directory -Path $scriptsPath >$null $null = New-Item -ItemType Directory -Path $scriptsPath
Rutas portables con Join-Path Join-Path
Join-Path Join-Path
En scripts, preferimos para construir rutas de forma portable
(evita concatenar strings con Join-Path Join-Path \ o /). Por ejemplo:
$scriptsPath = Join-Path 'dibs' 'scripts' Join-Path Join-Path construirá dibs/scripts o dibs\scripts según el sistema operativo.
En la terminal mantendremos los ejemplos simples y no usaremos
para no sobrecargar la sintaxis; pero en archivos Join-Path Join-Path .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, en lugar de cat cat ). 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.
Get-Content Get-Content
Compatibilidad entre sistemas
Get-Alias -Definition Set-Location Set-Location Set-Location
En este caso, (que cambia el directorio actual) tiene dos
aliases disponibles:
Set-Location Set-Location
CommandType Name Version Source
----------- ---- ------- ------
Alias chdir -> Set-Location
Alias sl -> Set-LocationConclusiones
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 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
sientan la base para proyectos portables y mantenibles.Join-PathJoin-Path
¿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.
En otros lenguajes…
¿Con ganas de más?
Referencias recomendadas
- “Meet PowerShell” (pp. 8–24) en Learn Powershell in a Month of Lunches, Fourth Edition: Covers Windows, Linux, and macOS por Travis PlunkCapítulo introductorio que orienta al lector en el ecosistema de PowerShell 7 en Windows, macOS y Ubuntu 18.04: diferencia entre shell y terminal, instalación (incluye el cambio de proceso a
pwsh.exey la coexistencia con Windows PowerShell 5.1) y primeras ejecuciones. Presenta la consola como interfaz ligera (con consejos de configuración de fuentes, colores e historial) y recomienda Visual Studio Code con la extensión de PowerShell, explicando la Integrated Console, IntelliSense y ajustes básicos. Cierra con verificación de versión () y un lab para dejar listo el entorno. Ideal si buscas poner a punto tu setup y entender qué interfaz usar antes de escribir tus primeros scripts.$PSVersionTable$PSVersionTable
Referencias adicionales
- “ Understanding PowerShell and basic string formatting ” en Microsoft Developer Blogs por Ed WilsonUn artículo introductorio sobre formateo de cadenas en PowerShell. Explica composite formatting de .NET (marcadores
,{0}{0}, ...) y cómo aplicarlo con{1}{1}y el operador[string]::Format()[string]::Format(), comparándola con las cadenas expandibles (-f-f). 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
- 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
-
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,
oGet-ProcessGet-Process), 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. VolverNew-ItemNew-Item