PowerShell y la gestión de versiones
Introducción
La llegada de Satya Nadella como CEO de Microsoft Corporation en 2014 cambió la filosofía general de la empresa. Como resultado, el mundo libre, que incluye a Linux, es visto ahora como un aliado.
Como resultado, Microsoft ha creado una serie de proyectos de código abierto, pero también ha participado en proyectos ya existentes. Entre ellos figuran una versión multiplataforma del framework .NET, SQL Server para Linux, un intérprete de comandos Bash para Windows, Visual Studio multiplataforma y, sobre todo, PowerShell multiplataforma.
También se han firmado asociaciones con empresas que trabajan en proyectos que giran en torno al mundo libre. La razón principal es sencilla: Azure. En efecto, Microsoft tiene todo el interés en integrar y ofrecer el mayor número posible de tecnologías en su plataforma en la nube.
Más tarde (junio de 2018), para mostrar su cada vez mayor implicación en el mundo del código abierto, Microsoft compró la plataforma GitHub.
Las fuentes de PowerShell, por su parte, pasaron a ser de código abierto y multiplataforma en 2016. En aquel momento, esta versión de PowerShell se llamaba PowerShell Core, numerada 6.0, basada en la multiplataforma .NET Core mencionada anteriormente.
1. Las versiones en detalle
En el momento de escribir estas líneas, nos encontramos en la versión 7.2 de PowerShell Core. Pero...
Instalación de PowerShell Core
Sabemos que los entornos Windows tienen su versión de Windows PowerShell por defecto (1.0-5.1). ¿Qué ocurre cuando deseamos instalar PowerShell Core en nuestro sistema?
El procedimiento varía en función del sistema de destino.
Aquí cubriremos una instalación en Windows 10 y Debian 11.
1. Descarga del código fuente de GitHub
Como ya se ha mencionado, el código fuente de PowerShell Core está disponible en GitHub. Una sección también le indica cómo recuperar los paquetes de instalación de PowerShell Core: https://github.com/PowerShell/PowerShell#get-powershell
Para Windows, puede descargar el paquete MSI. Para Linux, puede descargar el paquete correspondiente al sistema que esté utilizando: Ubuntu, Debian (.deb), Red Hat o CentOS (.rpm).
En la página web que aparece en el enlace anterior, haga clic en la versión que necesite:

La columna Downloads (stable) se refiere a la versión actual de PowerShell Core.
2. Instalación en Windows
Una vez descargado el paquete MSI, inicie la instalación haciendo doble clic en él.
La instalación puede personalizarse de varias maneras. Está, por supuesto, la carpeta de instalación, que por defecto es Program Files. Pero también hay otras opciones más interesantes:

-
Add PowerShell to Path Environment Variable: la carpeta de instalación de PowerShell...
Gestión de actualizaciones
Cuando hay una nueva versión de PowerShell Core disponible, aparece un mensaje al iniciar la consola:

Ejemplo aquí con la versión 7.2.1 para una actualización a 7.2.3
El procedimiento varía en función del sistema.
1. En Windows
Para Windows, puede descargar la nueva versión directamente desde GitHub y, a continuación, ejecutar el archivo MSI (el mismo proceso que en la fase de instalación).
Alternativamente, si marcó las opciones Enable updating PowerSHell through Microsoft Update or WSUS y Use Microsoft Update when I check for updates durante la instalación anterior, PowerShell se actualizará como el resto de actualizaciones de Windows, a través del cliente Windows Update.
2. En Linux
Para Linux, si se ha instalado como se ha descrito anteriormente, utilizando el repositorio de Microsoft y la utilidad apt, se puede actualizar como para cualquier paquete:
sudo apt update && sudo apt upgrade
Novedades, depreciaciones y limitaciones de PowerShell 7
PowerShell Core, como cualquier actualización de una versión de software, viene con su parte de nuevas características y depreciaciones. A continuación, se ofrece una lista no exhaustiva de los cambios introducidos por esta versión de PowerShell. Esto permitirá una adaptación inicial del código de Windows PowerShell a PowerShell Core.
Cada capítulo destacará los casos en los que la funcionalidad depende de una versión específica de PowerShell.
1. Novedades
PowerShell Core aporta una serie de nuevas e interesantes funciones que le harán más productivo en su uso cotidiano de PowerShell.
SSH
Desde PowerShell Core 6.x, se ha integrado el protocolo SSH para facilitar la comunicación entre sistemas Unix y Windows. Ahora es posible utilizar el parámetro -SSHTransport en los comandos Enter-PSSession, New-PSSession e Invoke-Command.
Este punto se trata con más detalle en el capítulo Gestión remota avanzada.
Operador ternario
El operador ternario se ha implementado en PowerShell 7.0. Se basa en la sintaxis del operador ternario de C#: <condición>? <ejecutar si es verdadero> : <ejecutar si es falso>.
Ejemplo
PS > $PSVersionTable.PSversion.Major -gt '7' ? PS7' : 'PS5
PS7
Para más información sobre el operador ternario, consulte la sección de ayuda about_If.
Operadores de condición nula
Existen cuatro operadores de condición nula: ? ??=, ?. y ?[] que realizarán diferentes acciones dependiendo de si lo que está a su izquierda tiene o no un valor nulo:
-
??: este operador devuelve lo que hay a la derecha si el valor de la izquierda es cero.
Ejemplo
PS > $null ?? 100
100
PS >...
Desarrollo en PowerShell con Visual Studio Code
En Windows, Windows PowerShell ISE le permite diseñar scripts PowerShell. Tiene un valor incalculable, especialmente con sus snippets y otros add-ons como ISESteroids. Sin embargo, se basa en una interfaz gráfica WPF, y .NET Core no admite interfaces WPF en Linux. Entonces, ¿cómo aprovechar una interfaz tan práctica como PowerShell ISE para desarrollar scripts en este OS? Afortunadamente, un año antes de que se anunciara PowerShell Core, el equipo de Visual Studio lanzó una nueva interfaz de desarrollo de código abierto: Visual Studio Code (VSCode).
Además de ser ligero y fluido, es multiplataforma, por lo que puede instalarse en Windows, Linux y macOS. Otra característica de Visual Studio Code es su modularidad. Al igual que ISE, puede ampliarse para interpretar nuevos lenguajes o extender su funcionalidad. Así que, en lugar de empezar de nuevo con un nuevo IDE, el equipo de PowerShell optó por invertir en la creación de una extensión de PowerShell en VSCode.
1. Instalación de Visual Studio Code
Visual Studio Code se instala de forma diferente en los distintos sistemas operativos.
Para descargar la versión correcta, vaya a https://code.visualstudio.com/Downloady haga su elección.

Página de descarga de Visual Studio Code
Para facilitar que VSCode reconozca el entorno PowerShell Core, asumimos que PowerShell Core ya está instalado en los distintos entornos.
2. La interfaz de Visual Studio Code
VSCode ha sido diseñado para integrar de forma nativa la gestión de repositorios Git, independientemente del proveedor (GitHub, GitLab, etc.). El único requisito es que instale el cliente Git en su estación de trabajo. Este paso no se cubre aquí, pero si busca más información sobre el tema, puede ir a esta dirección: https://git-scm.com/downloads
A la izquierda de la interfaz VSCode, en una cinta vertical, hay cinco herramientas disponibles. De arriba a abajo, son:
-
un explorador de carpetas. Muestra todo el árbol de carpetas y archivos del espacio de trabajo;
-
una potente herramienta de búsqueda. Busca en todos los archivos del espacio de trabajo;
-
una interfaz de gestión Git (que requiere la instalación del cliente Git);
-
un depurador;
-
un gestor de extensiones.
Hay un sexto elemento, en forma de rueda...
Scripts en función del entorno
Dado que los scripts están pensados para ser utilizados en diferentes plataformas, es lógico preguntarse cómo se sabe en qué sistema se está. Para ello, PowerShell Core tiene variables automáticas: $IsLinux, $IsWindows, $IsMacOs.
Ejemplo de uso en Windows
PS C:\Program Files\PowerShell\7> $IsLinux
False
PS C:\Program Files\PowerShell\7> $IsWindows
True
PS C:\Program Files\PowerShell\7> $IsMacOS
False
Ejemplo de uso en Linux
PS /root> $IsLinux
True
PS /root> $IsWindows
False
PS /root> $IsMacOS
False
Entonces es posible escribir una función de este tipo
function Get-OSInfo {
if($IsLinux){
uname -a
}elseif($IsWindows){
Get-CimInstance -ClassName Cim_OperatingSystem
}
}
Resultado en Windows
PS C:\Program Files\PowerShell\7> Get-OSInfo ...
Funciones experimentales
Las funciones experimentales, como su nombre indica, son funciones que aún se están diseñando. Sin embargo, su desarrollo permite probarlas sin necesidad de utilizar una versión previewde PowerShell Core. Las funciones experimentales no se incluyen en Windows PowerShell.
Por supuesto, se recomienda encarecidamente evitar su uso en un entorno de producción. Estas características pueden conducir a BreakingChanges. Estos cambiarán radicalmente el comportamiento de PowerShell y por lo tanto interrumpirán las secuencias de comandos que ya tiene en su lugar.
Para obtener una lista de las funciones experimentales disponibles, utilice el comando Get-ExperimentalFeature:
PS > Get-ExperimentalFeature
Name Enabled Source Description
---- ------- ------ -----------
PSAnsiRenderingFileInfo False PSEngine Enable coloring ...
PSCommandNotFoundSuggestion False PSEngine Recommend poten ... ...