Compartir a través de


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.

  • Instala y ejecuta en paralelo con Windows PowerShell
  • Compatibilidad mejorada con los módulos existentes de Windows PowerShell
  • Nuevas características de lenguaje, como operadores ternarios y ForEach-Object -Parallel
  • Rendimiento mejorado
  • Comunicación remota basada en SSH
  • Interoperabilidad multiplataforma
  • Compatibilidad con contenedores de Docker

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

PowerShell 7 se admite en 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 de Linux. Para obtener una lista de los sistemas operativos compatibles e información sobre el ciclo de vida de soporte técnico, consulte elciclo de vida de soporte técnico de PowerShell .

Instalación de PowerShell 7

Para obtener flexibilidad y admitir las necesidades de TI, ingenieros de DevOps y desarrolladores, hay varias opciones disponibles para instalar PowerShell 7. En la mayoría de los casos, las opciones de instalación se pueden reducir a los métodos siguientes:

  • Implementación de PowerShell mediante el paquete MSI
  • Desplegar PowerShell usando el paquete ZIP de

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 permiso de administrador. Cualquier usuario puede implementar el paquete ZIP. El paquete ZIP es la manera más fácil de instalar PowerShell 7 para las pruebas, antes de confirmar una instalación completa.

También puede instalar PowerShell 7 a través de la Tienda Windows o winget. Para obtener más información sobre ambos métodos, consulte las instrucciones detalladas de 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 que la inversión en PowerShell esté protegida y que la migración a PowerShell 7 sea sencilla.

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

Diferencias en las versiones de .NET

PowerShell 7.4 se basa en .NET 8.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 obtener más información, Diferencias entre Windows PowerShell 5.1 y PowerShell 7.x.

Ruta de instalación separada y nombre ejecutable

PowerShell 7 se instala en un nuevo directorio, lo que permite la ejecución 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 Windows PowerShell 5.1 y PowerShell 7. Si usted va a migrar de PowerShell 6.x a PowerShell 7, se quita PowerShell 6 y se reemplaza el PATH.

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

PSModulePath independiente

De forma predeterminada, Windows PowerShell y PowerShell 7 almacenan módulos en diferentes ubicaciones. 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 los módulos Core y Desktop.

Á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
Instalado por el usuario
Ámbito AllUsers
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Instalado por el usuario
Á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 módulos.

Nota

Es posible que existan rutas de acceso adicionales si ha cambiado la variable de entorno PSModulePath o los módulos o aplicaciones personalizados instalados.

Para obtener más información, vea about_PSModulePath.

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

Perfiles independientes

Un perfil de PowerShell es un script que se ejecuta cuando se inicia PowerShell. Este script personaliza el entorno agregando comandos, alias, funciones, variables, módulos y unidades de PowerShell. El script de perfil hace 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 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, incluido Azure PowerShell y Active Directory. Seguimos trabajando con otros equipos para agregar compatibilidad nativa con PowerShell 7 para más módulos, como Microsoft Graph, Office 365 y otros. Para obtener la lista actual de módulos admitidos, consulte compatibilidad de módulos de PowerShell 7.

Nota

En Windows, también hemos agregado un interruptor UseWindowsPowerShell a Import-Module para hacer más sencilla la transición a PowerShell 7 para aquellos que usan módulos incompatibles. Para obtener 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 posteriores usan el protocolo WS-Management (WSMAN) para la negociación de conexiones y el transporte de datos. Administración remota de Windows (WinRM) usa el protocolo WSMAN. Si WinRM se ha habilitado, PowerShell 7 usa el punto de conexión de Windows PowerShell 5.1 existente llamado Microsoft.PowerShell para las conexiones remotas. Para actualizar PowerShell 7 para incluir su propio punto de conexión, ejecute el cmdlet Enable-PSRemoting. Para obtener información sobre cómo conectarse a puntos de conexión específicos, consulte WS-Management Comunicación remota en PowerShell

Para usar la función de remoting de Windows PowerShell, el equipo remoto debe estar configurado para la gestión remota. Para obtener más información, incluidas las instrucciones, vea 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.x para admitir 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 el PSGallery y ejecute el cmdlet Enable-SSH.

Los cmdlets New-PSSession, Enter-PSSessiony Invoke-Command tienen nuevos conjuntos de parámetros para admitir 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 at (@), seguido del nombre de equipo.

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

Puede configurar la autenticación de clave SSH mediante un archivo de clave privada con el parámetro keyFilePath . Para obtener más información, consulte administración de claves openSSH.

Compatibilidad con directiva de grupo

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

  • Configuración de la sesión de 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.
  • Activar el registro de bloques de script de PowerShell: habilita el registro detallado de todos los scripts de PowerShell.
  • Activar ejecución de script: establece la directiva de ejecución de PowerShell.
  • Activar transcripción de PowerShell: permite capturar la entrada y salida de comandos de PowerShell en transcripciones basadas en texto.
  • Establezca la ruta de acceso de origen predeterminada para Update-Help: establece el origen de la Ayuda actualizable en un directorio, no en Internet.

Para obtener más información, vea 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 de InstallPSCorePolicyDefinitions.ps1 instala plantillas administrativas de PowerShell en el equipo 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 registran eventos en registros de eventos separados. 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 scripting integrado (ISE) de Windows PowerShell solo admite Windows PowerShell.

La extensión actualizada de PowerShell incluye:

  • Nuevo modo de compatibilidad de ISE
  • PSReadLine en la consola integrada, que incluye el resaltado de sintaxis, la edición de múltiples líneas y la búsqueda hacia atrás
  • Mejoras de estabilidad y rendimiento
  • 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 Habilitar modo ISE disponible en la paleta de comandos de . Esta función cambia VSCode a un diseño de estilo ISE. El diseño de estilo ISE proporciona todas las nuevas características y funcionalidades de PowerShell en una experiencia de usuario conocida.

Para cambiar al nuevo diseño de ISE, presione Ctrl+Shift+P para abrir la Paleta de Comandos , escriba PowerShell y seleccione PowerShell: Habilitar el modo ISE.

Para volver al diseño original, abra la Paleta de Comandos, seleccione PowerShell: Deshabilitar el modo ISE (restaurar a los valores predeterminados).

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

Nota

No hay planes para actualizar el ISE con nuevas características. En las versiones más recientes de Windows 10 o Windows Server 2019 y versiones posteriores, el ISE es ahora una característica desinstalable por el usuario. No hay planes para quitar permanentemente el ISE. El equipo de PowerShell y sus asociados se centran 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.