Adam el Automatizador
¿Estás preparado para realizar tu actualización a PowerShell 7 y acceder a todas las nuevas funcionalidades? Si es así, este artículo es para ti.
Cuando se lanzó PowerShell 6, fue para llevar una versión básica de PowerShell a todas las plataformas (PowerShell Core). Con PowerShell 7 (que es la última versión de PowerShell en el momento de escribir este artículo), ahora buscamos que todas las plataformas sean iguales en el PowerShell que pueden ofrecer (tanto Windows PowerShell como PowerShell Core).
En este artículo, aprenderás a realizar una actualización de PowerShell 7 de forma manual y a automatizar el proceso de actualización en adelante con despliegues masivos mediante GPO y PowerShell Remoting.
En el momento de escribir este artículo, la versión actual de PowerShell 7 es la Preview 3. La mayoría de las referencias de este artículo se aplicarán a esta versión.
Cómo actualizar la versión de PowerShell en un equipo
Al igual que PowerShell Core 6.0, el proceso para instalar PowerShell Core 7 es similar. Veamos algunas formas diferentes de instalar PowerShell 7 en una sola máquina.
Antes de avanzar, conviene mencionar un par de requisitos previos antes de instalar la versión 7 de PowerShell. Verás que son los mismos requisitos que para la versión 6 de PowerShell.
- El Universal C Runtime debe estar instalado
- Windows Management Framework (WMF) 4.0 o más reciente – sólo si estás en una versión de Windows 7 o Windows Server 2008R2. En versiones posteriores de Windows como Windows 8.1, Windows 10 y Windows Server 2016, no es necesario WMF.
Instalar PowerShell 7 manualmente
Primero, descarga PowerShell 7. Para ello, ve a la página de GitHub Releases para PowerShell y busca la versión que quieres instalar. Para este artículo, estamos utilizando la versión PowerShell 7.0.0 preview 3. En Windows, desplázate un poco hacia abajo y descarga el archivo PowerShell-7.0.0-preview.3-win-x86.msi y ejecútelo.
El asistente te hará unas sencillas preguntas como dónde quieres que se instale PowerShell. Si desea ejecutar varias versiones de PowerShell una al lado de la otra, asegúrese de utilizar carpetas de instalación separadas.
El asistente también le preguntará si desea registrar PowerShell en la variable de entorno PATH
. Añadir la carpeta de instalación de PowerShell a la variable de entorno PATH
le permite llamar a PowerShell desde cualquier otro terminal, como una versión diferente de PowerShell o incluso cmd.exe.
Otra opción es Registrar PowerShell en el manifiesto de registro de eventos de Windows. Cuando se habilita, esta opción aprovecha el registro robusto que se incluye con esta versión de PowerShell.
Luego, le pregunta si desea habilitar PowerShell Remoting desde el principio, lo que puede ayudar con todas las tareas remotas.
Por último, se le preguntará si desea Agregar menús contextuales «Abrir aquí» al Explorador. Esta opción permite hacer clic con el botón derecho en cualquier carpeta cuando se navega en el Explorador de Windows y abrir una ventana de PowerShell dentro de ese directorio de trabajo.
Aunque los dos últimos son completamente opcionales y dependen de ti, te recomiendo encarecidamente que habilites los dos primeros, así:
Una vez que hayas respondido a todas sus preguntas, haz clic en Siguiente y comenzará la instalación.
Abrir PowerShell 7
Una vez instalado, puedes ejecutar PowerShell 7 abriendo cualquier terminal de línea de comandos y escribiendo pwsh-preview
.
Ten en cuenta que no utilizarás este nombre de comando una vez que la versión 7 de PowerShell salga de la fase de «preview». Una vez que salga de la vista previa, podrás lanzar PowerShell 7 con
pwsh
.
Instalación de PowerShell 7 con PowerShell
El jefe del equipo de Microsoft PowerShell, Steve Lee, tuiteó una forma práctica de instalar PowerShell 7 utilizando el cmdlet Invoke-RestMethod
de PowerShell. Este fragmento de código utiliza el comando para consultar el repositorio de GitHub de PowerShell, descargar un script de instalación que luego descarga e instala PowerShell 7 con una sola línea.
Abajo encontrarás la sintaxis para hacerlo. Abre una consola de Windows PowerShell y ejecuta el one-liner de abajo.
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Preview"
Este fragmento de código está usando el cmdlet de PowerShell Invoke-Expression
iex
en el one-liner) para aceptar una cadena y ejecutarla como código PowerShell. Esta cadena llama al cmdlet Invoke-RestMethod
irm
en el one-liner) para descargar el script que Steve ha escrito. Recomiendo encarecidamente utilizar el enlace y comprobar el código por sí mismo antes de ejecutar este comando.
El fragmento pasa los parámetros UseMSI
y Preview
al script para agarrar e instalar el último MSI.
Si quieres ejecutar este script de forma totalmente silenciosa y desatendida, puedes utilizar el parámetro Quiet
. En el momento de escribir este artículo, el parámetro Preview
sigue apuntando a PowerShell 7 Preview 3.
Instalación de PowerShell 7 con un módulo
Otra forma de conseguir instalar PowerShell 7 es utilizando el módulo PowerShell de Jeff Hicks llamado PSReleaseTools. Este módulo, al igual que el one-liner de Steve, ayuda a mantener tu versión de PowerShell actualizada.
Con dos líneas de PowerShell, puedes descargar el módulo con Install-Module
y usando el comando Install-PSPreview
que viene con el módulo PSRelaseTools, puedes obtener la vista previa de PowerShell 7 instalada.
PS51> Install-Module -name PSReleaseTools -ForcePS51> Install-PSPreview -mode Quiet
Despliegue de PowerShell 7 en una organización
Hay un par de opciones cuando se trata de desplegar PowerShell 7 a escala. Veamos dos formas comunes de hacerlo.
Despliegue de PowerShell 7 con un GPO
PowerShell es fácil de desplegar a través de GPO ya que se presta fácilmente a otras tecnologías de Microsoft mientras está empaquetado como un MSI. Cuando se despliega esto a través de GPO hay algunas cosas que usted querrá tener en cuenta.
Usar un GPO basado en el equipo
En primer lugar asegúrese de usar una política basada en el equipo y no una política basada en el usuario. Puedes leer más sobre las diferencias entre estas dos políticas aquí. En los servidores, la mayoría de las veces, los usuarios no están iniciando la sesión de forma interactiva, lo que pone en marcha un despliegue.
Si está desplegando PowerShell 7 en muchos servidores, querrá que el despliegue se produzca independientemente de la interacción del usuario con el equipo.
Configure un recurso compartido de archivos de red
Asimismo, asegúrese de que el recurso compartido de red en el que pone el MSI de PowerShell 7 tiene el permiso adecuado para permitir que todos los servidores de su entorno accedan a él. Aunque está fuera del alcance de este artículo, puede encontrar más aquí sobre la creación de recursos compartidos de archivos.
Configurar el GPO
A continuación, crearás tu GPO con los siguientes pasos:
- Coloca el MSI en el recurso compartido de archivos asignado al que tus equipos puedan acceder.
- Crea un GPO de inicio dentro de la Consola de administración de directivas de grupo. Puede leer más sobre las GPO de inicio aquí
- Una vez creada la GPO, ábrala y navegue hasta Configuración del equipo -> Configuración del software.
- Haga clic con el botón derecho en Instalación de software y luego seleccione Nuevo -> Paquete.
- En el cuadro de diálogo, añada la ruta UNC completa al MSI. Por ejemplo, si un archivo compartido llamado carpeta se encuentra en el servidor.namef, la ruta sería \\Nservidor.name\carpeta\Npowershell-7.msi
- Haga clic en Abrir -> Asignado -> OK.
Adjunte el GPO a la(s) OU(s) requerida(s)
Una vez creado, adjunte el GPO a la(s) OU(s) requerida(s). Vuelva a comprobarlo en un par de horas y el despliegue debería estar prácticamente completado.
Comprobar el progreso de la instalación de la GPO
Si prefiere un enfoque más práctico para comprobar el despliegue de la directiva de grupo, eche un vistazo a este breve script a continuación que creará un informe con el objeto de directiva de grupo aplicado a los equipos de una OU específica.
Asegúrese de cambiar el nombre distinguido de la OU (OU=Domain Controllers,DC=mylab,DC=local) por su OU.
Note que puede ejecutar esto en un controlador de dominio o en un equipo unido al dominio con el módulo PowerShell ActiveDirectory instalado.
$computers = Get-ADComputer -Filter * -SearchBase 'OU=Domain Controllers, DC=mylab, DC=local'ForEach ($computer in $computers) { Get-GPResultantSetOfPolicy -Computer $computer -ReportType HTML -Path c:\temp\$computer.html}
Si quieres comprobar servidores específicos, el siguiente comando te será útil. Llega a un equipo remoto ($computer
) y comprueba la versión de PowerShell instalada en ese equipo con $PSVersionTable.PSVersion
.
PS> Invoke-Command -Computername $computer -Scriptblock {$PSVersionTable.psversion}
Por último, si encuentras algún equipo que no tenga aplicada la directiva de grupo, puedes ejecutar el siguiente comando y forzará la actualización de la directiva de grupo en el equipo de destino:¡
PS> Invoke-GPUpdate -Computer $computer
Despliegue de PowerShell 7 con PowerShell Remoting
Otra gran forma de desplegar PowerShell en equipos remotos es con PowerShell! Aunque pueda parecer un poco meta, PowerShell es un lenguaje de scripting lo suficientemente robusto como para ayudar a la instalación de su sustituto.
Antes de empezar, asegúrate de que PowerShell remoting está habilitado y que has configurado los permisos adecuados para ejecutar comandos remotos en todo tu entorno. Puede encontrar una guía sobre cómo habilitar PSRemoting a través de GPO aquí.
Dado que ya conoce el one-liner que para instalar PowerShell cubierto anteriormente, necesitará «envolver» ese comando en un scriptblock y decirle al comando Invoke-Command
que lo ejecute a través de una o más máquinas remotas.
A continuación se muestra un ejemplo de bucle a través de una lista de equipos almacenados en la matriz $computers
y luego ejecutar el script install-powershell.ps1 en todos ellos.
$creds = $(Get-Credential)ForEach ($computer in $computers) { Invoke-Command -ComputerName $computer -Credential $creds {iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Preview -Quiet"}}
Resumen
Hay muchas razones para mantener tu versión de PowerShell actualizada, al menos en tu propia máquina si no en tu entorno de producción. Podrá utilizar las últimas características, aprovechar las mejoras de rendimiento e incluso asegurarse de que su código más antiguo no se rompa en las versiones más nuevas.
Como puede ver, hay muchas maneras de descargar e instalar nuevas versiones de PowerShell. Escoge el método que te funcione en tu entorno y sigue con PowerShellin’!
Las lecturas adicionales
- Cómo comprobar tu versión de PowerShell (¡Todas las formas!)
La versión de PowerShell es una de las más recientes.