PowerShell vs. Python: Una batalla por las edades

¿Cuál es el mejor lenguaje de programación? Puede obtener diez respuestas diferentes al preguntar a diez desarrolladores diferentes. En este artículo, vamos a comparar dos lenguajes: PowerShell y Python. Obtendrás una idea de cada uno de estos lenguajes y entenderás cómo se comparan y contrastan en características como la sintaxis, la disponibilidad en diferentes plataformas y más.

¡Es hora de una batalla entre PowerShell y Python!

Al final de este artículo, podrás responder algunas preguntas comunes:

  • ¿Qué tienen en común ambos lenguajes?
  • ¿Qué los hace diferentes?
  • ¿Cuáles son los mejores casos de uso para cada uno de ellos?
  • ¿En qué se diferencia la sintaxis?
  • ¿Qué tipo de rol sería mejor para aprovechar al máximo uno sobre el otro?

Este artículo es para aquellos que tienen poco o ningún conocimiento sobre alguno de estos lenguajes y están confundidos acerca de si usar PowerShell o Python. Este artículo también es para aquellos que ya entienden uno de los lenguajes y les gustaría aprender sobre el otro.

¡Vamos a sumergirnos!

Por rol laboral

Aunque podrías hablar sobre los aspectos técnicos de Python y PowerShell todo el día, una parte importante de comparar los dos lenguajes es determinar qué tipo de rol laboral se adapta mejor a cada lenguaje.

Tanto PowerShell como Python fueron desarrollados en dos lados diferentes (Microsoft y la comunidad de código abierto de Linux). La sintaxis, la comunidad y, por lo tanto, la sensación general de ambos lenguajes son diferentes y, por lo tanto, generalmente se adoptan para ciertos roles laborales.

Es importante destacar aquí que PowerShell (Core), que a partir de la versión 6.0.0, ha sido de código abierto. Los tiempos están cambiando.

Administradores de sistemas

Tanto PowerShell como Python son excelentes lenguajes para aprender para los administradores de sistemas. Ambos son excelentes herramientas de automatización y pueden ahorrar mucho tiempo para un administrador de sistemas. Sin embargo, para los administradores de sistemas de Windows, PowerShell será una mejor opción debido a su integración nativa con el marco .NET.

Por otro lado, Python es excelente para los administradores de sistemas de Linux.

Aunque Python y PowerShell (Core) son compatibles con múltiples plataformas, encontrarás que la gran mayoría de los roles laborales se dividen entre Windows y PowerShell, y Python y Linux.

Desarrolladores

Para trabajos más orientados al desarrollo, Python es sin duda el líder. Python tiene un amplio soporte en áreas en las que PowerShell nunca ha incursionado, como la ciencia de datos, el análisis estadístico y más. A veces, Python se siente más como un lenguaje orientado a la ciencia.

Python también ejecuta muchas aplicaciones web del lado del servidor y otras aplicaciones “amigables para los desarrolladores”.

Aunque PowerShell puede ser utilizado como lenguaje de desarrollo, generalmente es más adecuado para roles laborales que requieren más automatización, como DevOps o automatización general de administración de sistemas.

Por sistema operativo

PowerShell

PowerShell es el héroe para entornos de Windows; es la mejor habilidad que puedes aprovechar para automatizar tareas en Windows. Esto es especialmente cierto cuando se trata de productos como Active Directory y Microsoft Exchange, tanto en entornos locales como en Office 365.

Dado que PowerShell tiene acceso directo al marco .NET, está perfectamente integrado con todos los sistemas Windows y se puede utilizar fácilmente para llevar a cabo cualquier tarea.

Sin embargo, PowerShell tiene soporte para Linux pero, hasta la fecha de esta escritura, no es tan común como Python.

Python

Python es generalmente mejor en entornos de Linux. Debido a sus profundas raíces en la comunidad de Linux, encontrarás módulos de Python para hacer casi cualquier cosa en Linux.

Python también se puede ejecutar en otras plataformas como iOS y AIX.

Por tarea

PowerShell

Puedes utilizar PowerShell para crear una herramienta para administrar tareas diarias, e incluso puedes crear una interfaz gráfica de usuario utilizando Windows PowerShell para que tu herramienta sea más fácil de usar.

Python

Python generalmente se utiliza mejor para tareas “más pesadas” como el aprendizaje automático, las estadísticas, la ciencia de datos y las aplicaciones web y de escritorio del lado del servidor. Python también tiene un gran soporte para el procesamiento de imágenes.

Entender las similitudes y diferencias de sintaxis

Vamos a entrar en los detalles de cada lenguaje para compararlos y contrastarlos.

PowerShell y Python son orientados a objetos, lo que significa que ambos están construidos sobre el concepto de objetos lógicos donde crean, manipulan y reutilizan objetos para realizar tareas específicas.

Tanto PowerShell como Python reutilizan código mediante módulos. Los módulos pueden ser potencialmente reutilizados más adelante en otros programas, o puedes importar directamente módulos creados por otros programadores.

Ambos lenguajes tienen una amplia biblioteca de módulos que puedes usar fácilmente en tus scripts.

PowerShell es una shell y lenguaje de script basado en tareas, construido sobre el marco de trabajo .NET, que acepta y devuelve objetos del marco de trabajo .NET, mientras que Python es un lenguaje de programación interpretado

El intérprete de Python toma el código legible por humanos y crea otra forma de código que es entendida por el intérprete, para luego ser cambiada a un código legible por máquina donde ocurre la ejecución real.

Ahora vamos a empezar con lo básico de ambos lenguajes, como los comentarios, la declaración de variables, las condiciones y otros conceptos básicos, para tener una mejor idea de sus similitudes y diferencias.

Comentarios

Hacer un comentario de una línea en PowerShell o Python es idéntico: usa el signo de numeral (#) al principio de la línea como se muestra a continuación.

# Este es un comentario en PowerShell y no se ejecutará
# Este es un comentario en Python y no se ejecutará

Declaración de variables

Todas las variables en PowerShell comienzan con un $ seguido de un nombre. A continuación, puedes ver cómo se asigna una variable para contener un entero.

$var = 1

La definición de variables de tipo cadena funciona de la misma manera en PowerShell, pero deberás encerrar el valor entre comillas simples o dobles.

$var2 = "string"
$var3 = 'string'

Consulta el documento about_Variables para obtener más información sobre las variables en PowerShell.

En Python, las variables se tratan de manera casi idéntica pero no requieren que la variable comience con un $.

var1 = 7
var2 = "string"
var3 = 'string'

Puedes aprender más sobre las variables en Python a través de W3Schools y muchos otros recursos en línea.

Trabajando con operaciones matemáticas

En PowerShell y Python, cualquier número positivo o negativo sin decimales es un entero. Por defecto, se asignarán automáticamente a una variable de tipo entero. Las operaciones matemáticas se pueden ejecutar normalmente en estas variables.

En PowerShell, puedes ver algunos ejemplos de operaciones matemáticas básicas a continuación.

$int1 = 70
$int2 = 77
$int3 = -10
$int1 + $int2
$int2 - $int1
$int1 + $Int3
Python and integers

Consulta la serie “Cómo hacer matemáticas en PowerShell” en RedmondMag para obtener más información.

De manera similar, en Python también puedes realizar operaciones matemáticas básicas como se muestra a continuación.

int1 = 70
int2 = 77
int3 = -10
int1 + int2
int2 - int1
int1 + int3
Artitmetic in Python

Aprende más sobre las operaciones matemáticas en Python en este artículo útil de geeks2geeks.com.

Uso de declaraciones condicionales

Las declaraciones condicionales son importantes en cualquier lenguaje de programación. Estas permiten al desarrollador redirigir el flujo del código, dependiendo de una o más condiciones. Cuando se trata de declaraciones condicionales como constructos if/then, encontrarás que PowerShell y Python son casi idénticos.

A continuación puedes ver que hay una pequeña, pero muy importante, diferencia entre los dos lenguajes. PowerShell depende en gran medida de los paréntesis ( ), las llaves { } y otros caracteres especiales, pero Python utiliza la indentación.

Observa todos los paréntesis y llaves que se muestran a continuación en el ejemplo de PowerShell.

if (Condition) {
    Code to be executed if the condition is true
} else {
    Other code to be executed if the condition is false
}

Contrasta el código de PowerShell con el código de Python que se muestra a continuación. Solo verás dos puntos para indicar el final de las declaraciones condicionales y espacios para indicar el código que se ejecutará dentro.

if condition:
    Code to be executed if the condition is true
else:
    Other code to be executed if the condition is false

Para demostrarlo, veamos cómo se ve y se comporta una declaración if/then típica en PowerShell. Cuando se ejecuta el código a continuación, verás una salida de 77 es mayor que 70.

$var1 = 77
$var2 = 70
if ($var1 -gt $var2) {
    Write-Host -Object "$var1 is greater than $var2"
} else {
    Write-host -Object "$var1 is less than $var2"
}

En contraste, observa cómo se realiza la misma tarea en Python. Hay varias diferencias, incluidos diferentes operadores y comandos para mostrar texto en la consola.

if var1 > var2:
    print(f"{var1} is greater than {var2}")
else:
    print(f"{var1} is less than {var2}")

Bucles

Otro concepto importante en los lenguajes de programación son los bucles. Los bucles permiten que un lenguaje repita o itere sobre un fragmento de código continuamente hasta que se cumpla una condición o durante un número determinado de veces.

En PowerShell, una instrucción foreach común se vería así.

foreach ($item in $list) {
	Code to be executed for each item
}

En Python, un bucle similar que realiza la misma tarea utilizaría un bucle for como se muestra a continuación.

for item in list:
	Code to be executed for each item

Hay una gran similitud en la sintaxis utilizada por PowerShell y Python, especialmente para lo básico y el uso principal de los lenguajes. Estas similitudes son una gran ventaja para cualquier persona que domine PowerShell y quiera aprender más sobre Python, o viceversa.

Resolviendo el mismo problema de manera diferente

Ahora vamos a mostrar cómo resolver un problema común de manera un poco diferente con PowerShell y Python. Para hacerlo, vamos a leer un archivo de texto simple con números delimitados por líneas y solo devolveremos un rango específico de números en la consola.

El archivo que usaremos se llama input_text.txt y contiene números delimitados por líneas que van desde 1 hasta 6345.

Vamos a crear una función tanto en PowerShell como en Python para procesar todos los números devueltos por el archivo.

Procesando un archivo con PowerShell

A continuación, verás cómo podrías hacer esto en PowerShell.

Define a function called Get-TwoDigits
 function Get-TwoDigits {
     [CmdletBinding()]
     param(
         [Parameter()]
         $List ## Proporciona un parámetro de entrada llamado Lista que representa los números
     )
     ## Itera sobre cada número en la Lista. Si el número es mayor que 9 y menor
     ## que 99, devuelve ese número a la consola
     foreach($num in $List){
         if($num -gt 9 -and $num -le 99 ){
             Write-Host $num
         }
 }
 }
 Read the text file and place contents into an array called inputlist
 PS51> $inputlist = Get-Content -Path .\input_text.txt
 Call the function providing the contents of the file as the List parameter
 PS51> Get-TwoDigits -List $inputlist

Cuando ejecutas Get-TwoDigits, verás que PowerShell solo devuelve cualquier número en input_text.txt que esté entre 9 y 99.

Procesando un archivo con Python

Ahora, realizaremos los mismos pasos con Python para notar las diferencias de sintaxis.

## Abrir el archivo utilizando el método open()
File_Read = open("/PS_Vs._PY/input_text.txt")

## Leer el archivo y dividir la cadena en un arreglo utilizando el método splitlines()
inputData = (File_Read.read().splitlines())

## Cerrar el archivo abierto
File_Read.close()

## Definir una función llamada two_digits con un único parámetro llamado input_list
def two_digits (input_list):
    ## Iterar sobre cada número en la lista. Si el número es mayor que 9 y menor
    ## que 99, devolver ese número en la consola
    for num in input_list:
        if (int(num) > 9) and (int(num) <= 99):
            print(num)


>>> two_digits(inputData)

Cuando ejecutas la función two_digits(), verás que Python solo devuelve cualquier número en input_text.txt que esté entre 9 y 99.

Crear una función en Python sigue casi la misma estructura. Ten en cuenta que la indentación es vital en Python, al igual que la sensibilidad a mayúsculas y minúsculas.

Lectura adicional

Source:
https://adamtheautomator.com/powershell-vs-python/