🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

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:

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:

  1. Get-Service: Obtiene todos los servicios como "objetos".
  2. |: Pasa el conjunto de objetos al siguiente comando.
  3. Where-Object ...: De los objetos pasados, filtra solo aquellos cuyo nombre para mostrar (propiedad DisplayName) contenga "Windows".
  4. |: Pasa los resultados filtrados al siguiente comando.
  5. 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).

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!