Programación · n.º 9 entre los lenguajes más usados

Aprende PowerShell desde cero

Automatiza Windows y la nube con comandos que trabajan con objetos.

  • 10 lecciones
  • 10 ejercicios interactivos
  • 11 conceptos clave
  • 24,6 % lo usa*

Qué es PowerShell y para qué sirve

PowerShell es la shell y el lenguaje de scripts de Microsoft. A diferencia de otras terminales, sus comandos (cmdlets) se pasan objetos con propiedades, no texto, lo que hace muy fácil filtrar, ordenar o exportar información. Windows trae Windows PowerShell 5.1, y PowerShell 7 se instala aparte y también funciona en macOS y Linux.

  • Administrar y automatizar Windows
  • Gestionar servidores y la nube (Azure, Microsoft 365)
  • Tareas repetitivas con archivos

Para empezar: Busca «PowerShell» en el menú Inicio o abre Terminal de Windows y escribe los ejemplos.

Nivel 1 Básico

Lección 1 · Básico

Qué es PowerShell y tu primer cmdlet

Los comandos de PowerShell se llaman cmdlets y siguen el patrón Verbo-Sustantivo: Get-Date, Get-Process, Stop-Service… Si conoces el verbo y el objeto, casi puedes adivinar el nombre.

Write-Output (o simplemente escribir un valor) muestra algo en la consola. PowerShell no distingue mayúsculas de minúsculas en los nombres de los comandos.

Ejemplo práctico
Get-Date
Write-Output "Hola desde PowerShell"
2 + 3          # 5
Get-Process | Select-Object -First 3

Ejercicio

¿Qué forma tienen los nombres de los cmdlets?

Ver la solución

Respuesta: Verbo-Sustantivo. Todos siguen el patrón Verbo-Sustantivo, como Get-Date o Remove-Item.

Lección 2 · Básico

Descubrir comandos: Get-Help, Get-Command y Get-Member

No hace falta memorizar: Get-Command busca comandos (admite comodines), Get-Help explica cómo se usa uno y sus ejemplos, y Get-Member muestra qué propiedades y métodos tiene un objeto.

La primera vez, Update-Help (como administrador) descarga la ayuda completa.

Ejemplo práctico
Get-Command *service*
Get-Help Get-Service -Examples
Get-Service | Get-Member

Ejercicio

Completa para ver las propiedades de los objetos que devuelve Get-Process.

Get-Process | Get-
Ver la solución

Respuesta: Member. Get-Member lista las propiedades y métodos de los objetos que recibe.

Lección 3 · Básico

Variables y texto

Las variables empiezan por $: $nombre = "Ana". No hace falta declarar el tipo, aunque puedes forzarlo con corchetes, como [int].

Entre comillas dobles, las variables se sustituyen por su valor; entre comillas simples, el texto se queda tal cual.

Ejemplo práctico
$nombre = "Ana"
[int]$edad = "30"     # se convierte a número
$edad + 1             # 31

"Hola, $nombre"       # Hola, Ana
'Hola, $nombre'       # Hola, $nombre
"El año que viene: $($edad + 1)"

Ejercicio

¿Qué muestra 'Hola, $nombre' (comillas simples)?

Ver la solución

Respuesta: Hola, $nombre. Las comillas simples no sustituyen variables: el texto se muestra literalmente.

Conceptos clave

Lección 4 · Básico

La tubería de objetos

La barra | pasa la salida de un cmdlet al siguiente. En PowerShell lo que viaja son objetos completos, así que puedes ordenar por una propiedad o elegir columnas sin recortar texto.

Sort-Object ordena, Select-Object elige propiedades o los primeros resultados y Format-Table presenta el resultado como tabla.

Ejemplo práctico
# Los 5 procesos que más memoria usan
Get-Process |
  Sort-Object WorkingSet -Descending |
  Select-Object -First 5 Name, Id, WorkingSet

Ejercicio

¿Qué pasa por la tubería | en PowerShell?

Ver la solución

Respuesta: Objetos con propiedades. Cada cmdlet recibe objetos, por eso Sort-Object WorkingSet puede ordenar por esa propiedad directamente.

Nivel 2 Intermedio

Lección 5 · Intermedio

Filtrar con Where-Object

Where-Object se queda con los objetos que cumplen una condición escrita entre llaves; $_ representa el objeto actual.

Los operadores de comparación son palabras: -eq (igual), -ne, -gt (mayor que), -lt, -like (con comodines) y -match (expresión regular).

Ejemplo práctico
# Archivos de más de 100 MB en Descargas
Get-ChildItem "$HOME\Downloads" -File |
  Where-Object { $_.Length -gt 100MB } |
  Select-Object Name, @{ n = "MB"; e = { [math]::Round($_.Length / 1MB) } }

# Servicios detenidos
Get-Service | Where-Object Status -eq "Stopped"

Ejercicio

Completa el operador «mayor que».

Where-Object { $_.Length  1GB }
Ver la solución

Respuesta: -gt. En PowerShell, «mayor que» se escribe -gt (greater than); > sirve para redirigir a un archivo.

Lección 6 · Intermedio

Condiciones y bucles

if, elseif y else funcionan con los mismos operadores (-eq, -gt…). foreach recorre una colección y ForEach-Object hace lo mismo dentro de una tubería.

Los bloques van entre llaves.

Ejemplo práctico
$espacioLibreGB = (Get-PSDrive C).Free / 1GB

if ($espacioLibreGB -lt 20) {
  "Queda poco espacio: $([math]::Round($espacioLibreGB)) GB"
} else {
  "Espacio suficiente"
}

foreach ($n in 1..3) { "Vuelta $n" }
1..3 | ForEach-Object { $_ * 10 }   # 10, 20, 30

Ejercicio

¿Qué produce 1..3?

Ver la solución

Respuesta: Los números 1, 2 y 3. El operador de rango .. genera la lista de enteros entre los dos extremos.

Lección 7 · Intermedio

Scripts y la directiva de ejecución

Un script es un archivo .ps1 con comandos. Se ejecuta escribiendo su ruta, como .\limpiar.ps1.

Por seguridad, Windows bloquea los scripts según la directiva de ejecución. Get-ExecutionPolicy muestra la actual; para tus propios scripts basta con RemoteSigned solo para tu usuario. No desactives la protección del todo.

Ejemplo práctico
Get-ExecutionPolicy -List

# Permite tus scripts locales (los descargados deben estar firmados)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# Ejecutar un script de la carpeta actual
.\limpiar.ps1

Ejercicio

¿Qué extensión tienen los scripts de PowerShell?

Ver la solución

Respuesta: .ps1. Los scripts de PowerShell se guardan con la extensión .ps1.

Conceptos clave

Nivel 3 Avanzado

Lección 8 · Avanzado

Funciones con parámetros

Una función agrupa código con un nombre, que conviene que siga también el patrón Verbo-Sustantivo. El bloque param() declara sus parámetros, con tipo y valor por defecto.

Con [Parameter(Mandatory)] PowerShell pide el valor si no lo pasas.

Ejemplo práctico
function Get-PrecioFinal {
  param(
    [Parameter(Mandatory)][decimal]$Precio,
    [decimal]$Iva = 21
  )
  [math]::Round($Precio * (1 + $Iva / 100), 2)
}

Get-PrecioFinal -Precio 100          # 121,00 (con Windows en español)
Get-PrecioFinal -Precio 100 -Iva 10  # 110,0

Ejercicio

Completa el bloque que declara los parámetros.

function Saludar {
  ([string]$Nombre)
  "Hola, $Nombre"
}
Ver la solución

Respuesta: param. param(...) declara los parámetros de una función o de un script.

Conceptos clave

Lección 9 · Avanzado

Errores con try/catch

Muchos errores de los cmdlets no detienen el comando: solo muestran un aviso en rojo. Para poder capturarlos con try y catch añade -ErrorAction Stop.

Dentro de catch, $_ es el error y $_.Exception.Message su mensaje.

Ejemplo práctico
try {
  Get-Item "C:\no-existe.txt" -ErrorAction Stop
}
catch {
  Write-Warning "No se pudo leer: $($_.Exception.Message)"
}
finally {
  "Comprobación terminada"
}

Ejercicio

¿Para qué sirve -ErrorAction Stop?

Ver la solución

Respuesta: Para que el error se pueda capturar con catch. Convierte el error en uno que detiene la ejecución, y así try/catch lo captura.

Lección 10 · Avanzado

Automatizar: exportar, comprobar y programar

Como trabajas con objetos, exportar a CSV o JSON es una línea: Export-Csv y ConvertTo-Json. Get-FileHash calcula la huella de un archivo para comprobar que no ha cambiado.

Para que un script se ejecute solo, prográmalo con el Programador de tareas de Windows, indicando como programa powershell.exe -File ruta\script.ps1.

Ejemplo práctico
# Inventario de programas en un CSV que abre Excel
Get-Process | Select-Object Name, Id, CPU |
  Export-Csv "$HOME\procesos.csv" -NoTypeInformation -Encoding UTF8

# Huella SHA-256 de un archivo descargado
Get-FileHash "$HOME\Downloads\instalador.exe" -Algorithm SHA256

Ejercicio

Completa el cmdlet que guarda los objetos en un archivo CSV.

Get-Service | -Csv servicios.csv
Ver la solución

Respuesta: Export. Export-Csv convierte cada objeto en una fila del archivo CSV.

¿Has terminado? Sigue practicando

Repasa los conceptos en el diccionario, practica con estas herramientas o prueba otro lenguaje: las ideas que has aprendido (variables, condiciones, funciones, objetos…) te servirán en cualquiera.

  • Seguridad y privacidad

    Comprobar el hash de un archivo

    Calcula el SHA-256, SHA-1 o MD5 de un archivo y compáralo con la suma publicada.

  • Texto y programación

    Comparar dos textos

    Encuentra las diferencias entre dos versiones de un texto, línea a línea y palabra a palabra.

Fuentes consultadas

* Porcentaje de personas que dijeron haber usado PowerShell en la Stack Overflow Developer Survey 2026: Technology (pregunta sobre lenguajes de programación, de scripts y de marcado; todas las respuestas). El progreso de las lecciones se guarda solo en este navegador.