Prácticas recomendadas de PowerShell 7 multiplataforma

Tabla de contenido:

Prácticas recomendadas de PowerShell 7 multiplataforma
Prácticas recomendadas de PowerShell 7 multiplataforma
Anonim

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

Uno de los mayores contribuyentes a este aumento de popularidad es que el equipo de PowerShell de Microsoft lo hizo 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 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. NET.

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

PowerShell 7 se convirtió en GA en marzo del año pasado, y aunque los cmdlets se ejecutan en cualquier sistema operativo, todavía hay algunas mejores prácticas a seguir para asegurarse de que sus scripts de PowerShell funcionen 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 usa para señalar los directorios anidados en un sistema de archivos, mientras que en Linux y macOS, el

/ En su lugar, lo hace el caráctero la barra inclinada y la barra invertida se usa como carácter de escape.(Si alguna vez tiene problemas para mantener estos dos rectos, imagínese que se vuelca. La barra invertida cae hacia atrás, la barra inclinada hacia adelante cae hacia adelante)

Esto puede generar algunos desafíos al crear secuencias de comandos en la mayoría de los otros idiomas, pero PowerShell 7 se traducirá en un objeto de directorio y realmente no se preocupa por los caracteres utilizados para dividir la ruta. Sin embargo, un área en la que puede tener problemas es que los sistemas de archivos de Linux y macOS se preocupan por las mayúsculas y tratarán los nombres de los directorios 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 utilice. Si lo necesita, puede pasar la ruta como una cadena y llamar al método

ToLower() en su código, pero esto solo funcionará si el nombre del directorio ya está en la parte inferior. caso.

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

No usar 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 escribir

ls

o

cgi

que

Get-ChildItem incluso con tabulador. Dicho esto, rara vez es una buena idea usar alias en las secuencias de comandos porque hace que la secuencia de comandos dependa de tener ese alias establecido 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 devuelto será muy diferente y eso descartará el resto del script.

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

ls

y

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

Algunos comandos como

ls

pueden no cambiar demasiado, pero con otros como el comando

date, PowerShell devuelve un objeto completamente diferente de el 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, utilice 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

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

Usar una instrucción Switch para determinar el sistema operativo

A veces, tienes una dependencia que no puedes usar en scripts, sin importar qué tipo de trucos uses. En esos casos, PowerShell 7 tiene algunos indicadores reservados que devolverán

true

o

false

según el sistema operativo desde el que se esté ejecutando. Por ejemplo,

$IsMacOS

devolverá

True

en macOS y

False

en cualquier otro sistema operativo, y

$IsLinux

devolverá

True sin importar en qué distribución de Linux se encuentre.

También hay un indicador

$IsWindows

, pero con una gran advertencia: solo devuelve

True cuando se ejecuta PowerShell Core o PowerShell 7 en Windows Nunca se volvió a portar a Windows PowerShell, por lo que 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 encuentra al ejecutar multiplataforma, que es la declaración de cambio que describe aquí.

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

Resumen

Ahora debería tener una idea de algunas formas de escribir sus scripts y módulos de PowerShell 7 para que puedan ejecutarse un poco más suavemente en varias plataformas. ¡Pruébalos en tus guiones hoy!

Tema popular