CMD y PowerShell básico: qué son, cómo funcionan y por qué importan
· 14 min de lectura
Aprende a usar la línea de comandos en Windows desde cero: CMD y PowerShell, navegación de carpetas, variables de entorno, comandos de red, pipelines, redirección de salida y ejecución de scripts.
Cuando usas un ordenador normalmente, haces clic en iconos, arrastras ventanas y pulsas botones. Todo eso es la interfaz gráfica (GUI). Pero debajo de esas ventanas hay otra forma de hablar con el sistema: escribir órdenes con el teclado en una pantalla de texto. Eso es la línea de comandos, y es la herramienta principal de cualquier profesional de ciberseguridad.
En Windows existen dos intérpretes de comandos principales: CMD (también llamado Símbolo del sistema) y PowerShell. CMD lleva con nosotros desde los años ochenta y conserva una sintaxis sencilla. PowerShell apareció en 2006, es mucho más potente y trabaja con objetos en lugar de texto plano. Ambos conviven en cualquier instalación moderna de Windows y cada uno tiene sus puntos fuertes.
En esta lección vas a aprender qué es cada uno, cómo abrirlos, cómo moverte por carpetas, consultar información del sistema, encadenar comandos con pipelines, redirigir la salida a archivos y ejecutar tus primeros scripts. Todo explicado desde cero, paso a paso.
Cualquier comando que ejecutes en tu equipo puede modificar archivos, detener servicios o cambiar la configuración del sistema. Practica primero en una máquina virtual o en un entorno de pruebas. Si estás empezando, evita ejecutar comandos que no entiendas completamente, sobre todo con privilegios de administrador.
Qué es la línea de comandos en Windows#
Imagina que la interfaz gráfica de Windows es el mostrador de un restaurante: eliges platos de un menú con fotos. La línea de comandos es la cocina: puedes pedir exactamente lo que quieras, con los ingredientes que quieras, pero necesitas conocer las recetas. Es más rápida, más flexible y te permite automatizar tareas repetitivas.
CMD (cmd.exe) es el intérprete clásico. Cuando abres una ventana negra con texto blanco y ves algo como C:\Users\ana>, estás en CMD. Los comandos de CMD son sencillos: dir para listar archivos, cd para cambiar de carpeta, copy para copiar. Funciona bien para tareas rápidas y es compatible con scripts .bat que llevan décadas usándose en administración de sistemas.

PowerShell (powershell.exe o pwsh.exe) es el intérprete moderno. Su ventana suele tener fondo azul oscuro y el prompt muestra PS C:\Users\ana>. La diferencia fundamental es que PowerShell trabaja con objetos: cuando ejecutas un comando, el resultado no es texto suelto sino datos estructurados con propiedades que puedes filtrar, ordenar y transformar. Además, PowerShell viene con cientos de comandos llamados cmdlets (se pronuncia «command-lets»), organizados con nombres descriptivos como Get-Process o Stop-Service.
Por qué es importante#
Si tu objetivo es trabajar en ciberseguridad, la línea de comandos no es opcional. Las herramientas de pentesting se ejecutan desde terminal. Los análisis forenses se hacen con comandos. Los scripts de automatización se escriben y se lanzan desde aquí. Y cuando estás dentro de un sistema durante una auditoría, muchas veces solo tienes acceso a una shell de texto, sin escritorio gráfico.
Además, la línea de comandos te da información que la interfaz gráfica no muestra. Por ejemplo, con un solo comando puedes ver todas las conexiones de red activas, los procesos que consumen más memoria o las variables de entorno que configuran el comportamiento del sistema. Esa visibilidad es exactamente lo que necesitas para detectar anomalías o entender cómo funciona una máquina.
Por último, aprender CMD y PowerShell te prepara para Linux: los conceptos de navegación, redirección y pipelines son los mismos, solo cambian los nombres de los comandos. Lo que aprendas aquí te servirá en la siguiente lección.
Conceptos clave#
Antes de escribir tu primer comando, conviene tener claros algunos términos:
| Concepto | Qué significa |
|---|---|
| Shell | El programa que interpreta tus comandos y le dice al sistema operativo qué hacer |
| Prompt | El texto que aparece antes del cursor, indicándote que la shell está lista para recibir órdenes |
| Comando interno | Un comando que forma parte de la propia shell, como cd o dir en CMD |
| Comando externo | Un programa independiente que la shell localiza y ejecuta, como ipconfig.exe o nmap.exe |
| Cmdlet | Un comando nativo de PowerShell con formato Verbo-Sustantivo, como Get-Help o Set-Location |
| Pipeline | Una cadena donde la salida de un comando se convierte en la entrada del siguiente |
| Variable de entorno | Un valor con nombre que el sistema almacena y que los programas usan para saber cosas como la carpeta del usuario o la ruta de búsqueda de ejecutables |
| Redirección | Enviar la salida de un comando a un archivo en vez de mostrarla en pantalla |
| Script | Un archivo de texto con una serie de comandos que se ejecutan en orden, como un programa sencillo |
La tabla siguiente compara los dos intérpretes:
| Característica | CMD | PowerShell |
|---|---|---|
| Año de aparición | 1987 | 2006 |
| Tipo de salida | Texto plano | Objetos estructurados |
| Sintaxis | Comandos cortos: dir, copy, del | Cmdlets: Get-ChildItem, Copy-Item |
| Scripting | Archivos .bat limitados | Scripts .ps1 con lógica avanzada |
| Autocompletado | Solo nombres de archivo | Comandos, parámetros y valores |
| Ayuda integrada | comando /? | Get-Help comando -Detailed |
| Plataformas | Solo Windows | Windows, Linux y macOS (PowerShell 7) |
Cómo funciona#
Cuando abres CMD o PowerShell y escribes un comando, ocurren estos pasos:
- Escribes el comando y pulsas Enter.
- La shell analiza lo que escribiste: separa el nombre del comando de sus argumentos y opciones.
- Si es un comando interno (como
cd), la propia shell lo ejecuta. Si es externo (comoipconfig.exe), la shell lo busca en las carpetas listadas en la variable de entornoPATH. - El comando se ejecuta y produce una salida (texto en CMD, objetos en PowerShell).
- La salida se muestra en la pantalla, a menos que la hayas redirigido a un archivo o la hayas pasado a otro comando con un pipeline.
La variable PATH es especialmente importante: es una lista de carpetas separadas por punto y coma donde Windows busca los programas. Si escribes nmap y el sistema dice que no lo reconoce, probablemente la carpeta donde está instalado Nmap no está en tu PATH.
Uso práctico paso a paso#
Paso 1: abrir la terminal#
Para abrir CMD, pulsa la tecla Windows, escribe cmd y pulsa Enter. Para abrir PowerShell, escribe powershell en su lugar. Si necesitas privilegios de administrador (por ejemplo, para ver todas las conexiones de red), haz clic derecho y selecciona «Ejecutar como administrador».
En Windows 10 y 11 también puedes usar Windows Terminal, que agrupa CMD, PowerShell y hasta WSL (Linux) en una sola ventana con pestañas. Es la opción más cómoda.
Paso 2: navegar por carpetas#
Moverte entre carpetas funciona igual en ambos intérpretes:
cd C:\Users\ana\Documents
Para ver dónde estás, mira el prompt. En CMD muestra la ruta directamente. En PowerShell puedes usar:
Get-Location
Para listar lo que hay en la carpeta actual:
dir
En PowerShell el equivalente es Get-ChildItem, aunque dir también funciona porque PowerShell reconoce los alias clásicos de CMD.
Para limpiar la pantalla cuando se llena de texto:
cls
Para subir un nivel en el árbol de carpetas:
cd ..
Paso 3: consultar información del sistema#
Estos comandos te dan información esencial sobre la máquina. En CMD:
ipconfig
Muestra la configuración de red: dirección IP, máscara de subred y puerta de enlace. Con la opción /all obtienes además los servidores DNS y la dirección MAC:
ipconfig /all
Para ver las conexiones de red activas y los puertos en escucha:
netstat -ano
La opción -a muestra todas las conexiones, -n usa números en vez de nombres y -o indica el identificador del proceso (PID) que tiene abierta cada conexión.
Para listar los procesos en ejecución:
tasklist
En PowerShell, los equivalentes son más potentes porque devuelven objetos:
Get-Process
Get-NetTCPConnection
Get-Service
Get-Process lista todos los procesos con su consumo de CPU y memoria. Get-Service muestra los servicios del sistema y si están en ejecución o detenidos.
Paso 4: variables de entorno#
Las variables de entorno almacenan información que el sistema y los programas necesitan. Para verlas todas en CMD:
set
Para ver una variable concreta, por ejemplo la ruta del usuario:
echo %USERPROFILE%
echo %PATH%
En PowerShell la sintaxis cambia. Las variables de entorno están en un «disco virtual» llamado Env::
$env:USERPROFILE
$env:PATH
Get-ChildItem Env:
Algunas variables de entorno importantes para ciberseguridad:
USERNAME - nombre del usuario actual
USERPROFILE - carpeta personal (C:\Users\ana)
COMPUTERNAME - nombre del equipo
PATH - carpetas donde se buscan ejecutables
TEMP - carpeta de archivos temporales
SYSTEMROOT - carpeta de Windows (normalmente C:\Windows)
Paso 5: pipelines y filtrado#
Un pipeline toma la salida de un comando y la envía como entrada al siguiente, usando el carácter | (barra vertical). Es como una cadena de montaje: cada comando hace una operación y pasa el resultado al siguiente.
En CMD, los pipelines trabajan con texto. Por ejemplo, para buscar la palabra «ESTABLISHED» en las conexiones de red:
netstat -an | find "ESTABLISHED"
En PowerShell, los pipelines son más potentes porque pasan objetos. Puedes filtrar, ordenar y seleccionar propiedades:
Get-Process | Where-Object {$_.CPU -gt 10} | Sort-Object CPU -Descending
Ese comando lista los procesos que consumen más de 10 segundos de CPU, ordenados de mayor a menor. Cada parte de la cadena refina el resultado.
Otro ejemplo útil: buscar servicios en ejecución:
Get-Service | Where-Object {$_.Status -eq "Running"}
Paso 6: redirección de salida#
En lugar de ver el resultado en pantalla, puedes guardarlo en un archivo. El operador > crea un archivo nuevo (o lo sobrescribe) y >> añade al final sin borrar lo que ya había:
ipconfig /all > red.txt
netstat -ano >> red.txt
En PowerShell funciona igual, aunque también tienes el cmdlet Out-File:
Get-Process | Out-File procesos.txt
Get-Service | Export-Csv servicios.csv
Export-Csv es especialmente útil porque genera un archivo CSV que puedes abrir con Excel o procesar con otras herramientas.
Paso 7: ejecutar scripts#
Un script es un archivo de texto con comandos. En CMD, los scripts tienen extensión .bat o .cmd. Puedes crear uno con el Bloc de notas:
@echo off
echo Recopilando informacion del sistema...
systeminfo > informe.txt
ipconfig /all >> informe.txt
netstat -ano >> informe.txt
echo Listo. Revisa informe.txt
Guárdalo como recopilar.bat y ejecútalo escribiendo su nombre en CMD.
En PowerShell los scripts usan la extensión .ps1. Pero antes de ejecutar uno, necesitas entender la execution policy: una política de seguridad que controla qué scripts puede ejecutar PowerShell. Por defecto está en Restricted (no permite ejecutar ninguno). Para ver la política actual:
Get-ExecutionPolicy
Para cambiarla temporalmente y permitir scripts locales:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned permite ejecutar scripts creados en tu máquina, pero exige firma digital para los descargados de internet. Es un equilibrio razonable entre seguridad y funcionalidad.
Un script básico de PowerShell:
Write-Output "Recopilando informacion del sistema..."
Get-ComputerInfo | Select-Object OsName, OsVersion, CsTotalPhysicalMemory | Out-File informe.txt
Get-NetTCPConnection | Where-Object {$_.State -eq "Established"} | Out-File -Append informe.txt
Write-Output "Listo. Revisa informe.txt"
Qué puedes hacer con esto#
| Tarea | Comando CMD | Comando PowerShell |
|---|---|---|
| Ver tu IP | ipconfig | Get-NetIPAddress |
| Listar conexiones activas | netstat -ano | Get-NetTCPConnection |
| Ver procesos en ejecución | tasklist | Get-Process |
| Buscar un proceso por nombre | tasklist /fi "imagename eq chrome.exe" | Get-Process -Name chrome |
| Ver servicios del sistema | sc query | Get-Service |
| Consultar información del equipo | systeminfo | Get-ComputerInfo |
| Resolver un nombre de dominio | nslookup ejemplo.com | Resolve-DnsName ejemplo.com |
| Comprobar conectividad | ping 8.8.8.8 | Test-Connection 8.8.8.8 |
Buenas prácticas#

- Lee antes de ejecutar. No copies y pegues comandos de internet sin entenderlos. Un comando mal usado puede borrar archivos o abrir puertos. Siempre lee qué hace cada parte antes de pulsar Enter.
- Usa la ayuda integrada. En CMD añade
/?al final de un comando para ver sus opciones:netstat /?. En PowerShell usaGet-Help: por ejemplo,Get-Help Get-Process -Exampleste muestra ejemplos reales de uso.
- Trabaja sin privilegios de administrador siempre que puedas. Solo abre una terminal como administrador cuando el comando lo requiera (instalar software, modificar servicios). Así reduces el riesgo de dañar algo por accidente.
- Guarda la salida de tus comandos. Cuando estés recopilando información de un sistema, redirige los resultados a archivos. Es más fácil revisar un archivo que volver a ejecutar todos los comandos.
- Usa rutas absolutas en los scripts. En vez de confiar en la carpeta actual, escribe la ruta completa:
C:\Users\ana\Documents\informe.txten lugar de soloinforme.txt. Así evitas errores cuando el script se ejecuta desde otra ubicación.
- Controla la execution policy con criterio. Nunca pongas
Unrestricteden un equipo real: permite ejecutar cualquier script sin preguntar. UsaRemoteSignedcomo mínimo.
Errores comunes de principiante#
- Confundir la sintaxis de CMD con la de PowerShell. Escribir
echo %PATH%en PowerShell no funciona (usa$env:PATH). Fíjate en el prompt para saber dónde estás: si empieza conPS, estás en PowerShell.
- No entender el PATH. Si escribes un comando y Windows dice que no lo reconoce, probablemente el programa no está en ninguna carpeta del PATH. Usa la ruta completa o añade la carpeta al PATH.
- Ejecutar comandos destructivos sin verificar. Comandos como
del,Remove-ItemoStop-Processactúan de inmediato y no siempre se pueden deshacer. Verifica siempre lo que va a afectar antes de ejecutar.
- Ignorar la execution policy. Intentar ejecutar un script
.ps1y que no pase nada (sin errores visibles) suele ser porque la policy lo bloquea silenciosamente. Compruébala conGet-ExecutionPolicy.
- Olvidar las comillas en rutas con espacios. Si la ruta tiene espacios, como
C:\Program Files, necesitas comillas:cd "C:\Program Files". Sin ellas, el intérprete cree queFileses otro argumento.
- Confundir
>con>>. El operador>sobrescribe el archivo completo. Si quieres añadir líneas al final sin borrar lo anterior, usa>>.
Preguntas frecuentes#
CMD o PowerShell: cuál debo aprender primero#
Aprende los dos, pero empieza por CMD porque es más sencillo y te ayuda a entender los fundamentos. Una vez que te sientas cómodo navegando carpetas y usando comandos básicos, pasa a PowerShell para aprovechar su potencia con objetos y filtrado.
Puedo usar comandos de CMD dentro de PowerShell#
Sí. PowerShell reconoce la mayoría de comandos de CMD como dir, cd, cls, copy y type. Internamente los trata como alias de sus propios cmdlets. Por ejemplo, dir en PowerShell ejecuta Get-ChildItem. Sin embargo, los parámetros a veces difieren, así que conviene aprender la sintaxis nativa de cada uno.
Qué es Windows Terminal y en qué se diferencia#
Windows Terminal es una aplicación de Microsoft que agrupa CMD, PowerShell, WSL (Linux en Windows) y otras shells en una sola ventana con pestañas, temas de color y atajos de teclado. No es un intérprete nuevo: es un contenedor moderno para los que ya existen. Es la forma recomendada de trabajar con la terminal en Windows 10 y 11.
Cómo sé si un comando necesita privilegios de administrador#
Si ejecutas un comando y recibes un mensaje como «Acceso denegado» o «Se requieren privilegios elevados», necesitas una terminal de administrador. Comandos que suelen requerir privilegios: instalar software, modificar servicios (sc, Set-Service), cambiar configuración de red (netsh) y ejecutar netstat con la opción -b para ver los nombres de los programas.
Por qué PowerShell es más útil para ciberseguridad#
Porque trabaja con objetos, lo que te permite filtrar y procesar información con precisión. Por ejemplo, puedes listar solo los procesos que escuchan en un puerto concreto, exportar resultados a CSV para analizarlos, o consultar el registro de Windows y las políticas de seguridad de forma programática. Muchas herramientas de auditoría y frameworks ofensivos usan PowerShell.
Resumen#
- La línea de comandos te da control directo sobre el sistema y es imprescindible en ciberseguridad.
- CMD es el intérprete clásico de Windows: sencillo, rápido y compatible con scripts
.bat. - PowerShell es el intérprete moderno: trabaja con objetos, tiene cmdlets descriptivos y permite scripting avanzado con
.ps1. - Los conceptos fundamentales son los mismos en ambos: navegación, variables de entorno, pipelines y redirección.
- Practica siempre en entornos controlados y lee los comandos antes de ejecutarlos.
- Lo que aprendas aquí te servirá en Linux: los principios de la terminal son universales.