Compara y entiende las diferencias entre PowerShell y cmd [con diagramas]
Cuando se piensa en la "pantalla negra" de Windows, mucha gente puede que imagine el antiguo "Símbolo del sistema (cmd.exe)". Sin embargo, lo que hemos estado aprendiendo en los artículos hasta ahora ha sido el "PowerShell", más moderno y potente, caracterizado por su fondo azul. Estos dos, aunque parecidos, son en realidad completamente distintos.
Seguro que muchos se preguntan: "¿Por qué hay dos tipos?", "¿Cuál de los dos debería usar al final?", "¿Está obsoleto el cmd?". En este artículo, compararemos a estos eternos rivales (?), PowerShell y el Símbolo del sistema, mediante tareas concretas, explicando sus diferencias de una manera que hasta los principiantes puedan entender.
Cuando termines de leer este artículo, habrás entendido claramente las abrumadoras ventajas y por qué deberías elegir PowerShell. ¡Comprobemos con nuestros propios ojos la diferencia entre el Símbolo del sistema, que es como un "martillo", y PowerShell, que es como una "herramienta eléctrica multifunción"!
La mayor y decisiva diferencia: "Objetos" contra "Texto"
La diferencia más fundamental entre PowerShell y cmd es el formato de la información que devuelven los comandos. Entender esto es la clave para comprender la diferencia entre ambos.
La visión del mundo del Símbolo del sistema (cmd): todo es "texto"
Cuando escribes un comando como dir en el Símbolo del sistema, lo que se muestra en la pantalla es simplemente "texto (una cadena de caracteres)" formateado para que lo lean los humanos. Es como una lista impresa en papel. Extraer solo el "nombre del archivo" o la "fecha de modificación" de esta lista para usarlo en el siguiente proceso es muy tedioso y requiere un procesamiento de cadenas de texto complejo.
C:\> dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es XXXX-XXXX
Directorio de C:\
07/07/2024 09:00 Program Files
07/07/2024 09:05 Users
07/07/2024 09:10 Windows
0 archivos 0 bytes
3 dirs 123.456.789.012 bytes libres
Este resultado es solo una "sucesión de caracteres" y, para un programa, son datos sin estructura.
La visión del mundo de PowerShell: todo son "objetos"
Por otro lado, cuando ejecutas un comando similar, Get-ChildItem, en PowerShell, lo que se devuelve es una colección de "objetos" estructurados. Un objeto es un bloque de datos que contiene diversa información (propiedades).
【Diagrama conceptual】Uno de los "objetos de archivo" que devuelve Get-ChildItem contiene la siguiente información almacenada de forma ordenada:
Name: "Program Files" (Nombre)Length: (Tamaño)CreationTime: "2024/07/07 9:00:00" (Fecha de creación)LastWriteTime: "2024/07/07 9:02:10" (Última fecha de escritura)Mode: "d-----" (Atributo)
Es como una tabla de Excel con la información organizada. Gracias a esta estructura, PowerShell hace que sea sorprendentemente fácil realizar operaciones flexibles basadas en datos, como "ordenar por tamaño descendente" o "mostrar solo los archivos con extensión .txt".
PS C:\> Get-ChildItem
Directorio: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 07/07/2024 09:00 Program Files
d----- 07/07/2024 09:05 Users
d----- 07/07/2024 09:10 Windows
Aunque parezcan similares, el punto más importante es que la calidad de los datos que se manejan por debajo es completamente diferente.
Comparación práctica: comparémoslos con una tarea específica
Vamos a comparar ambos con una tarea un poco compleja: "De la lista de servicios en ejecución, mostrar solo los que tengan 'Windows' en el nombre, ordenados por nombre".
El desafío en el Símbolo del sistema (cmd)
Intentar lograr esto en cmd es muy difícil. Se puede obtener una lista de servicios con net start, pero el resultado es solo texto. Extraer las líneas que contienen una palabra específica y luego ordenarlas requeriría el uso de findstr, sort y un complejo bucle for, lo cual es casi imposible para un principiante.
C:\> net start
Se han iniciado los siguientes servicios de Windows:
Application Host Helper Service
Background Tasks Infrastructure Service
Base Filtering Engine
...
Windows Audio
Windows Connection Manager
Windows Defender Antivirus Service
...
Extraer con precisión solo la información deseada de este muro de texto es una tarea titánica.
La elegante solución en PowerShell
En PowerShell, gracias a los objetos y la canalización, puedes escribir este proceso de forma intuitiva en una sola línea.
Get-Service | Where-Object { $_.DisplayName -like "*Windows*" } | Sort-Object -Property DisplayName
Esta única línea realiza los siguientes pasos en secuencia:
Get-Service: Obtiene todos los servicios como "objetos".|: Pasa el conjunto de objetos al siguiente comando.Where-Object ...: De los objetos pasados, filtra solo aquellos cuyo nombre para mostrar (propiedad DisplayName) contenga "Windows".|: Pasa los resultados filtrados al siguiente comando.Sort-Object ...: Ordena los objetos pasados por su nombre para mostrar (propiedad DisplayName).
Con esta comparación, seguro que has podido sentir lo superior que es PowerShell en el procesamiento de datos y sus ventajas.
Diferencias en comandos y sintaxis
Por compatibilidad con cmd, PowerShell te permite usar algunos comandos antiguos como "alias" (apodos). Sin embargo, sus cmdlets y sintaxis nativos están diseñados para ser más modernos y consistentes.
Manejo de variables
cmd: set nombre_variable=valor
set MYVAR=Hello World
PowerShell: $nombre_variable = valor
$myVar = "Hello World"
En PowerShell, la regla es prefijar los nombres de las variables con un $.
Bifurcación condicional (sentencia if)
cmd:
if "%MYVAR%"=="Hello World" (echo Same)
PowerShell:
if ($myVar -eq "Hello World") { Write-Host "Same" }
En PowerShell se utilizan operadores de comparación más intuitivos, como -eq (equal) o -gt (greater than).
¿Es cmd ya innecesario? El futuro del shell de Windows
Seguro que te preguntas: "Si PowerShell es tan práctico, ¿ya no necesito el Símbolo del sistema?". La respuesta es: "No, no desaparecerá pronto. Sin embargo, todo lo nuevo deberías hacerlo con PowerShell".
El Símbolo del sistema todavía se incluye en Windows para mantener la compatibilidad con sistemas muy antiguos y la enorme cantidad de archivos por lotes (.bat) creados en el pasado. Es poco probable que Microsoft lo elimine por completo.
Sin embargo, como se puede ver en el hecho de que PowerShell es la configuración predeterminada en la herramienta de terminal estándar de Windows, "Windows Terminal", no hay duda de que Microsoft ha posicionado a PowerShell como el centro de la futura administración y automatización de Windows.
Si vas a aprender la línea de comandos desde cero, elegir PowerShell sin dudarlo es la decisión más inteligente.
Resumen
Esta vez, hemos comparado las diferencias decisivas entre PowerShell y el Símbolo del sistema (cmd), con la ayuda de diagramas (conceptuales).
- La mayor diferencia es la filosofía de diseño fundamental: cmd maneja texto, mientras que PowerShell maneja objetos.
- PowerShell permite un procesamiento de datos flexible y potente al encadenar objetos con la canalización (pipeline).
- La convención de nomenclatura de comandos (
Verbo-Sustantivo) y la sintaxis también son más consistentes y modernas en PowerShell. - Aunque cmd no desaparecerá pronto, en el futuro de Windows, PowerShell es el protagonista.
Con esto, cuando te enfrentes a la pantalla negra de Windows, deberías tener claro por qué debes elegir la "herramienta multifunción" que es PowerShell. Nuestra serie de introducción a PowerShell termina aquí, pero tu viaje hacia la automatización no ha hecho más que empezar. ¡Te animamos a que incorpores PowerShell en tus tareas diarias y sientas su poder por ti mismo!