Tecnología

Prácticas recomendadas multiplataforma de PowerShell 7 – CloudSavvy IT

Uso de AngleSharp en PowerShell 7 para analizar páginas web - CloudSavvy IT

Logotipo de Powershell

Cuando se lanzó PowerShell por primera vez, el objetivo era llevar potentes herramientas de scripting a Windows, que en ese momento generalmente tenía una administración basada en GUI. Desde entonces, PowerShell ha crecido hasta convertirse en uno de los lenguajes de scripting más populares.

Uno de los mayores contribuyentes a este aumento de popularidad es que el equipo de PowerShell de Microsoft lo logró de código abierto en 2016, presentando PowerShell Core para PowerShell versión 6. Sin embargo, eso causó algunos problemas inesperados, como tener que admitir la compatibilidad entre la versión 5.1 (Windows PowerShell) y la versión 6.2 (PowerShell Core), o tener los mismos cmdlets haciendo cosas ligeramente diferentes en diferentes versiones de .NETO.

Para resolver eso, el equipo de PowerShell anunció que retiraban PowerShell 5.1 y que la próxima versión después de 6.2 sería PowerShell 7, que tendría como objetivo reemplazar Windows PowerShell en los sistemas operativos Windows sin sacrificar ninguna compatibilidad cuando se ejecuta en Mac o Linux.

PowerShell 7 fue GA en marzo del año pasado, y aunque los propios cmdlets se ejecutan en cualquier sistema operativo, todavía hay algunas mejores prácticas a seguir para asegurarse de que sus scripts de PowerShell se ejecuten sin problemas sin importar dónde se estén ejecutando.

Usar nombres de directorio en minúsculas

En el sistema operativo Windows, el \ o el carácter de barra invertida se utiliza para anotar directorios anidados en un sistema de archivos, mientras que en Linux y macOS, el / o el carácter de barra inclinada hacia adelante lo hace en su lugar y la barra invertida se utiliza como carácter de escape. (Si alguna vez tienes problemas para mantener estos dos rectos, imagínate que se vuelca. La barra invertida cae hacia atrás, la barra hacia adelante cae hacia adelante)

Esto puede generar algunos desafíos al realizar secuencias de comandos en la mayoría de los otros lenguajes, pero PowerShell 7 se traducirá en un objeto de directorio y realmente no se preocupan por los caracteres utilizados para dividir la ruta. Sin embargo, un área en la que puede meterse en problemas es que los sistemas de archivos de Linux y macOS se preocupan por las mayúsculas y tratan los nombres de directorio en diferentes casos como directorios diferentes.

La mejor práctica aquí es mantener los nombres de los directorios en minúsculas, sin importar la ruta que use. Si es necesario, puede pasar la ruta como una cadena y llamar al ToLower() en él en su código, pero esto solo funcionará si el nombre del directorio ya está en minúsculas.

  kMantenga los nombres de los directorios en minúsculas, independientemente de la ruta que utilice.

No utilice alias

La creación de alias puede ser una excelente manera de acortar la cantidad de escritura que tiene que hacer cuando ejecuta PowerShell desde una consola. Es mucho más fácil de escribir ls o cgi que Get-ChildItem incluso con la finalización de la pestaña. Dicho esto, rara vez es una buena idea usar alias en los scripts porque hace que el script dependa de tener ese alias configurado donde sea que se ejecute.

Eso es especialmente cierto para los sistemas Linux y macOS. En esas plataformas, en lugar de usar un alias para ejecutar otro comando de PowerShell, ejecuta el comando nativo, lo que significa que el objeto de retorno será muy diferente y eso eliminará el resto del script.

ls y Get-ChildItem ejecutándose en Windows 10 frente a Ubuntu Linux

ls y Get-ChildItem ejecutándose en Windows 10 vs Ubuntu Linux.

Algunos comandos como ls Puede que no cambie demasiado, pero con otros como el date comando, PowerShell devuelve un objeto completamente diferente del comando nativo de Linux, que eliminará cualquier cosa que dependa de la salida más adelante en el código. Incluso si solo necesita el valor de la cadena en un script de PowerShell, use PowerShell para obtenerlo.

date devuelve un objeto DateTime en Windows y un objeto String en Linux.

date devuelve un objeto DateTime en Windows y un objeto String en Linux.

Utilice una declaración de cambio para determinar el sistema operativo

A veces, tiene una dependencia sobre la que no puede escribir un script, sin importar qué tipo de trucos use. En esos casos, PowerShell 7 tiene algunas marcas reservadas que regresarán true o false dependiendo del sistema operativo desde el que se esté ejecutando. Por ejemplo, $IsMacOS volverá True en macOS y False en cualquier otro sistema operativo, y $IsLinux volverá True no importa en qué distribución de Linux se encuentre.

También hay un $IsWindows bandera, pero con una gran advertencia: solo devuelve True al ejecutar PowerShell Core o PowerShell 7 en Windows. Nunca se transfirió de nuevo a Windows PowerShell, por lo que solo arrojará un error cuando se ejecute allí.

Tyler Leonhardt, del equipo de PowerShell de Microsoft, ideó una excelente solución para determinar en qué sistema operativo se está ejecutando multiplataforma, que es la declaración de cambio que describe. aquí.

Excelente solución para determinar en qué sistema operativo se encuentra cuando se ejecuta multiplataforma.

Ahora debería tener una idea de algunas formas de escribir sus scripts y módulos de PowerShell 7 para que puedan ejecutarse de manera un poco más fluida entre plataformas. ¡Pruébelos en sus scripts hoy!

Leave a Comment

You may also like

Más