Migración de Windows PowerShell 5.1 a PowerShell 7

Diseñado para entornos híbridos, locales y en la nube, el paquete de PowerShell 7 incluye mejoras y nuevas características.

  • Se instala y se ejecuta en paralelo con Windows PowerShell
  • Compatibilidad mejorada con los módulos de Windows PowerShell existentes
  • Nuevas características de lenguaje, como los operadores ternarios y ForEach-Object -Parallel
  • rendimiento mejorado.
  • Comunicación remota basada en SSH
  • Interoperabilidad entre plataformas
  • Soporte para contenedores de Docker

PowerShell 7 funciona en paralelo con Windows PowerShell, lo que le permite probar y comparar fácilmente las distintas ediciones antes de implementarlo. La migración es sencilla, rápida y segura.

PowerShell 7 es compatible con los siguientes sistemas operativos Windows:

  • Windows 10 y 11
  • Windows Server 2016, 2019 y 2022

PowerShell 7 también se ejecuta en macOS y varias distribuciones Linux. Para ver una lista de los sistemas operativos admitidos e información sobre el ciclo de vida de soporte técnico, consulte Ciclo de vida de soporte técnico de PowerShell.

Instalación de PowerShell 7

Para ofrecer flexibilidad y satisfacer las necesidades del personal de TI, los ingenieros de DevOps y los desarrolladores, PowerShell 7 cuenta con varias opciones de instalación. En la mayoría de los casos, las opciones de instalación se pueden reducir a los siguientes métodos:

Nota:

El paquete MSI se puede implementar y actualizar con productos de administración como Microsoft Configuration Manager. Descargue los paquetes desde la página de versiones de GitHub.

La implementación del paquete MSI requiere permisos de administrador. Cualquier usuario puede implementar el paquete ZIP. El paquete ZIP es la forma más fácil de instalar PowerShell 7 para probarlo antes de comprometerse a una instalación completa.

También puede instalar PowerShell 7 mediante Windows Store o winget. Para obtener más información sobre ambos métodos, vea las instrucciones detalladas en Instalación de PowerShell en Windows.

Uso de PowerShell 7 en paralelo con Windows PowerShell 5.1

PowerShell 7 está diseñado para coexistir con Windows PowerShell 5.1. Las siguientes características garantizan la protección de la inversión en PowerShell y la migración fácil a PowerShell 7.

  • Ruta de instalación y nombre del archivo ejecutable independientes
  • PSModulePath independiente
  • Perfiles independientes para cada versión
  • Compatibilidad mejorada con los módulos
  • Nuevos puntos de conexión de comunicación remota
  • Compatibilidad con directiva de grupo
  • Registros de eventos independientes

Diferencias en las versiones de .NET

PowerShell 7.2 se basa en .NET 6.0. Windows PowerShell 5.1 se basa en .NET Framework 4.x. Las diferencias entre las versiones de .NET pueden afectar al comportamiento de los scripts, especialmente si llama directamente al método .NET. Para más información, consulte Diferencias entre Windows PowerShell 5.1 y PowerShell 7.x.

Ruta de instalación y nombre del archivo ejecutable independientes

PowerShell 7 se instala en un nuevo directorio, lo que permite que se ejecute en paralelo con Windows PowerShell 5.1.

Ubicaciones de instalación por versión:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7

La nueva ubicación se agrega a la ruta de acceso, lo que le permite ejecutar tanto Windows PowerShell 5.1 como PowerShell 7. Si va a migrar de PowerShell 6.x a PowerShell 7, se quita PowerShell 6 y se reemplaza la ruta de acceso.

En Windows PowerShell, el archivo ejecutable de PowerShell se denomina powershell.exe. En la versión 6 y posteriores, el archivo ejecutable se denomina pwsh.exe. El nuevo nombre facilita la compatibilidad con la ejecución en paralelo de ambas versiones.

PSModulePath independiente

De forma predeterminada, Windows PowerShell y PowerShell 7 almacenan los módulos en ubicaciones diferentes. PowerShell 7 combina esas ubicaciones en la variable de entorno $Env:PSModulePath. Al importar un módulo por nombre, PowerShell comprueba la ubicación especificada por $Env:PSModulePath. Esto permite que PowerShell 7 cargue tanto módulos principales como de escritorio.

Ámbito de instalación Windows PowerShell 5.1 PowerShell 7.0
Módulos de PowerShell $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $env:ProgramFiles\PowerShell\7\Modules
Usuario instalado
Ámbito AllUsers
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Usuario instalado
Ámbito CurrentUser
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

En los ejemplos siguientes se muestran los valores predeterminados de $Env:PSModulePath para cada versión.

  • Para Windows PowerShell 5.1:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    
  • Para PowerShell 7:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\PowerShell\Modules
    C:\Program Files\PowerShell\Modules
    C:\Program Files\PowerShell\7\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    

Tenga en cuenta que PowerShell 7 incluye las rutas de acceso de Windows PowerShell y las rutas de acceso de PowerShell 7 para proporcionar la carga automática de los módulos.

Nota

Pueden existir rutas de acceso adicionales si ha cambiado la variable de entorno PSModulePath o ha instalado módulos o aplicaciones personalizados.

Para más información, consulte about_PSModulePath.

Para más información sobre los módulos, consulte about_Modules.

Perfiles independientes

Un perfil de PowerShell es un script que se ejecuta cuando se inicia PowerShell. Este script agrega comandos, alias, funciones, variables, módulos y unidades de PowerShell para personalizar el entorno. El script de perfil permite que estas personalizaciones estén disponibles en cada sesión sin tener que volver a crearlas manualmente.

La ruta de acceso a la ubicación del perfil ha cambiado en PowerShell 7.

  • En Windows PowerShell 5.1, la ubicación del perfil es $HOME\Documents\WindowsPowerShell.
  • En PowerShell 7, la ubicación del perfil es $HOME\Documents\PowerShell.

Los nombres de archivo de perfil también han cambiado:

$PROFILE | Select-Object *Host* | Format-List
 AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
 AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
 CurrentUserAllHosts    : C:\Users\<user>\Documents\PowerShell\profile.ps1
 CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

Para más información, consulte about_Profiles.

Compatibilidad de PowerShell 7 con los módulos de Windows PowerShell 5.1

La mayoría de los módulos que usa en Windows PowerShell 5.1 ya funcionan con PowerShell 7, incluidos Azure PowerShell y Active Directory. Seguimos trabajando con otros equipos para agregar compatibilidad nativa de PowerShell 7 con más módulos, como Microsoft Graph, Office 365 y otros. Puede encontrar la lista actual de los módulos compatibles admitidos en Compatibilidad del módulo de PowerShell 7.

Nota

En Windows, también hemos agregado un modificador UseWindowsPowerShell a Import-Module para facilitar la transición a PowerShell 7 para aquellos que usan módulos incompatibles. Para más información sobre esta funcionalidad, consulte about_Windows_PowerShell_Compatibility.

Comunicación remota de PowerShell

La comunicación remota de PowerShell le permite ejecutar cualquier comando de PowerShell en uno o varios equipos remotos. Puede establecer conexiones persistentes, iniciar sesiones interactivas y ejecutar scripts en equipos remotos.

Comunicación remota de WS-Management

Windows PowerShell 5.1 y versiones anteriores usan el protocolo WS-Management (WSMAN) para la negociación de la conexión y el transporte de datos. Administración remota de Windows (WinRM) usa el protocolo WSMAN. Si se ha habilitado WinRM, PowerShell 7 usa el punto de conexión de Windows PowerShell 5.1 existente denominado Microsoft.PowerShell para las conexiones remotas. Para actualizar PowerShell 7 de forma que incluya su propio punto de conexión, ejecute el cmdlet Enable-PSRemoting. Para información sobre cómo conectarse a puntos de conexión específicos, consulte Comunicación remota de WS-Management en PowerShell.

Para usar la comunicación remota de Windows PowerShell, el equipo remoto debe estar configurado para la administración remota. Para más información y ver instrucciones, consulte About Remote Requirements (Acerca de los requisitos remotos).

Para más información sobre la comunicación remota, consulte Acerca de la comunicación remota.

Comunicación remota basada en SSH

La comunicación remota basada en SSH se agregó en PowerShell 6 para lograr la compatibilidad con otros sistemas operativos que no pueden usar componentes nativos de Windows como WinRM. La comunicación remota mediante SSH crea un proceso de host de PowerShell en el equipo de destino como un subsistema SSH. Para más información y ejemplos sobre cómo configurar la comunicación remota basada en SSH en Windows o Linux, consulte: Comunicación remota de PowerShell a través de SSH.

Nota

La Galería de PowerShell (PSGallery) contiene un módulo y un cmdlet que configura automáticamente la comunicación remota basada en SSH. Instale el módulo Microsoft.PowerShell.RemotingTools desde PSGallery y ejecute el cmdlet Enable-SSH.

Los cmdlets New-PSSession, Enter-PSSession y Invoke-Command tienen nuevos conjuntos de parámetros que admiten conexiones SSH.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Para crear una sesión remota, especifique el equipo de destino con el parámetro HostName y proporcione el nombre de usuario con UserName. Al ejecutar los cmdlets de forma interactiva, se le pedirá una contraseña.

Enter-PSSession -HostName <Computer> -UserName <Username>

Como alternativa, al usar el parámetro HostName, proporcione la información de nombre de usuario seguida del signo de arroba (@) y del nombre del equipo.

Enter-PSSession -HostName <Username>@<Computer>

Puede configurar la autenticación de la clave SSH mediante un archivo de clave privada con el parámetro KeyFilePath. Para más información, consulte Administración de claves de OpenSSH.

Compatibilidad con directiva de grupo

PowerShell incluye opciones de directiva de grupo para ayudarle a definir valores de opción coherentes para los servidores de un entorno empresarial. Esta configuración incluye:

  • Configuración de la sesión de la consola: establece un punto de conexión de configuración en el que se ejecuta PowerShell.
  • Activación del registro de módulos: establece la propiedad LogPipelineExecutionDetails de los módulos.
  • Activación del registro del bloque de scripts de PowerShell: permite el registro detallado de todos los scripts de PowerShell.
  • Activación de la ejecución de scripts: establece la directiva de ejecución de PowerShell.
  • Activación de la transcripción de PowerShell: permite la captura de la entrada y la salida de comandos de PowerShell en transcripciones basadas en texto.
  • Establecimiento de la ruta de acceso de origen predeterminada para Update-Help: establece el origen de la ayuda actualizable en un directorio, no en Internet.

Para más información, consulte about_Group_Policy_Settings.

PowerShell 7 incluye plantillas de directiva de grupo y un script de instalación en $PSHOME.

Las herramientas de directiva de grupo usan archivos de plantilla administrativa (.admx, .adml) para rellenar la configuración de directiva en la interfaz de usuario. Esto permite a los administradores administrar la configuración de directiva basada en el registro. El script InstallPSCorePolicyDefinitions.ps1 instala las plantillas administrativas de PowerShell en la máquina local.

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    Directory: C:\Program Files\PowerShell\7

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/27/2020 12:38 AM          15861 InstallPSCorePolicyDefinitions.ps1
-a---           2/27/2020 12:28 AM           9675 PowerShellCoreExecutionPolicy.adml
-a---           2/27/2020 12:28 AM           6201 PowerShellCoreExecutionPolicy.admx

Registros de eventos independientes

Windows PowerShell y PowerShell 7 anotan los eventos en registros independientes. Use el siguiente comando para obtener una lista de los registros de PowerShell.

Get-WinEvent -ListLog *PowerShell*

Para más información, consulte about_Logging_Windows.

Experiencia de edición mejorada con Visual Studio Code

Visual Studio Code (VSCode) con la extensión de PowerShell es el entorno de scripting admitido para PowerShell 7. El Entorno de script integrado (ISE) de Windows PowerShell solo admite Windows PowerShell.

La extensión de PowerShell actualizada incluye:

  • Nuevo modo de compatibilidad con el ISE
  • PSReadLine en la consola integrada, que incluye el resaltado de la sintaxis, la edición de varias líneas y la búsqueda inversa
  • Mejoras en el rendimiento y la estabilidad
  • Nueva integración de CodeLens
  • Finalización automática de la ruta de acceso mejorada

Para facilitar la transición a Visual Studio Code, use la función Enable ISE Mode (Habilitar el modo ISE) disponible en la paleta de comandos. Esta función cambia VSCode a un diseño de estilo ISE. El diseño de estilo ISE le proporciona todas las características y funcionalidades nuevas de PowerShell en una experiencia de usuario conocida.

Para cambiar al nuevo diseño de ISE, presione Ctrl+Mayús+P para abrir la paleta de comandos, escriba PowerShell y seleccione PowerShell: Enable ISE Mode (Habilitar el modo ISE).

Para establecer el diseño en el diseño original, abra la paleta de comandos y seleccione PowerShell: Disable ISE Mode (restore to defaults) (Deshabilitar el modo ISE [restaurar los valores predeterminados]).

Para más información sobre cómo personalizar el diseño de VSCode a ISE, consulte Cómo replicar la experiencia de ISE en Visual Studio Code.

Nota

No hay planes de actualizar el ISE con nuevas características. En las versiones más recientes de Windows 10 o Windows Server 2019 y versiones superiores, el ISE ya es una característica que puede desinstalar el usuario. No hay planes de quitar el ISE de forma permanente. El equipo de PowerShell y sus asociados están centrados en mejorar la experiencia de scripting en la extensión de PowerShell para Visual Studio Code.

Pasos siguientes

Ahora que posee los conocimientos para realizar la migración de forma efectiva, instale PowerShell 7 ya mismo.