Migración de Windows PowerShell 5.1 a PowerShell 7Migrating from Windows PowerShell 5.1 to PowerShell 7

Diseñado para entornos híbridos, locales y en la nube, el paquete de PowerShell 7 incluye mejoras y nuevas características.Designed for cloud, on-premises, and hybrid environments, PowerShell 7 is packed with enhancements and new features.

  • Se instala y se ejecuta en paralelo con Windows PowerShellInstalls and runs side-by-side with Windows PowerShell
  • Compatibilidad mejorada con los módulos de Windows PowerShell existentesImproved compatibility with existing Windows PowerShell modules
  • Nuevas características de lenguaje, como los operadores ternarios y ForEach-Object -ParallelNew language features, like ternary operators and ForEach-Object -Parallel
  • rendimiento mejorado.Improved performance
  • Comunicación remota basada en SSHSSH-based remoting
  • Interoperabilidad entre plataformasCross-platform interoperability
  • Soporte para contenedores de DockerSupport for Docker containers

PowerShell 7 funciona en paralelo con Windows PowerShell, lo que le permite probar y comparar fácilmente las distintas ediciones antes de implementarlo.PowerShell 7 works side-by-side with Windows PowerShell letting you easily test and compare between editions before deployment. La migración es sencilla, rápida y segura.Migration is simple, quick, and safe.

PowerShell 7 es compatible con los siguientes sistemas operativos Windows:PowerShell 7 is supported on the following Windows operating systems:

  • Windows 8.1 y 10Windows 8.1 and 10
  • Windows Server 2012, 2012 R2, 2016 y 2019Windows Server 2012, 2012 R2, 2016, and 2019

PowerShell 7 también se ejecuta en macOS y varias distribuciones Linux.PowerShell 7 also runs on macOS and several Linux distributions. 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.For a list of supported operating systems and information about the support lifecycle, see the PowerShell Support Lifecycle.

Instalación de PowerShell 7Installing 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.For flexibility and to support the needs of IT, DevOps engineers, and developers, there are several options available to install PowerShell 7. En la mayoría de los casos, las opciones de instalación se pueden reducir a los siguientes métodos:In most cases, the installation options can be reduced to the following methods:

Nota

El paquete MSI se puede implementar y actualizar con productos de administración como System Center Configuration Manager (SCCM).The MSI package can be deployed and updated with management products such as System Center Configuration Manager (SCCM). Descargue los paquetes desde la página de versiones de GitHub.Download the packages from GitHub Release page.

La implementación del paquete MSI requiere permisos de administrador.Deploying the MSI package requires Administrator permission. Cualquier usuario puede implementar el paquete ZIP.The ZIP package can be deployed by any user. El paquete ZIP es la forma más fácil de instalar PowerShell 7 para probarlo antes de comprometerse a una instalación completa.The ZIP package is the easiest way to install PowerShell 7 for testing, before committing to a full installation.

Uso de PowerShell 7 en paralelo con Windows PowerShell 5.1Using PowerShell 7 side-by-side with Windows PowerShell 5.1

PowerShell 7 está diseñado para coexistir con Windows PowerShell 5.1.PowerShell 7 is designed to coexist with 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.The following features ensure that your investment in PowerShell is protected and your migration to PowerShell 7 is simple.

  • Ruta de instalación y nombre del archivo ejecutable independientesSeparate installation path and executable name
  • PSModulePath independienteSeparate PSModulePath
  • Perfiles independientes para cada versiónSeparate profiles for each version
  • Compatibilidad mejorada con los módulosImproved module compatibility
  • Nuevos puntos de conexión de comunicación remotaNew remoting endpoints
  • Compatibilidad con directiva de grupoGroup policy support
  • Registros de eventos independientesSeparate Event logs

Ruta de instalación y nombre del archivo ejecutable independientesSeparate installation path and executable name

PowerShell 7 se instala en un nuevo directorio, lo que permite que se ejecute en paralelo con Windows PowerShell 5.1.PowerShell 7 installs to a new directory, enabling side-by-side execution with Windows PowerShell 5.1.

Ubicaciones de instalación por versión:Install locations by version:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell Core 6.x: $env:ProgramFiles\PowerShell\6PowerShell Core 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7PowerShell 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.The new location is added to your PATH allowing you to run both Windows PowerShell 5.1 and PowerShell 7. Si va a migrar de PowerShell Core 6.x a PowerShell 7, se quita PowerShell 6 y se reemplaza la ruta de acceso.If you're migrating from PowerShell Core 6.x to PowerShell 7, PowerShell 6 is removed and the PATH replaced.

En Windows PowerShell, el archivo ejecutable de PowerShell se denomina powershell.exe.In Windows PowerShell, the PowerShell executable is named powershell.exe. En la versión 6 y posteriores, el archivo ejecutable se denomina pwsh.exe.In version 6 and above, the executable is named pwsh.exe. El nuevo nombre facilita la compatibilidad con la ejecución en paralelo de ambas versiones.The new name makes it easy to support side-by-side execution of both versions.

PSModulePath independienteSeparate PSModulePath

De forma predeterminada, Windows PowerShell y PowerShell 7 almacenan los módulos en ubicaciones diferentes.By default, Windows PowerShell and PowerShell 7 store modules in different locations. PowerShell 7 combina esas ubicaciones en la variable de entorno $Env:PSModulePath.PowerShell 7 combines those locations in the $Env:PSModulePath environment variable. Al importar un módulo por nombre, PowerShell comprueba la ubicación especificada por $Env:PSModulePath.When importing a module by name, PowerShell checks the location specified by $Env:PSModulePath. Esto permite que PowerShell 7 cargue tanto módulos principales como de escritorio.This allows PowerShell 7 to load both Core and Desktop modules.

Ámbito de instalaciónInstall Scope Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell 7.0PowerShell 7.0
Módulos de PowerShellPowerShell modules $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $PSHOME\Modules
Usuario instaladoUser installed
Ámbito AllUsersAllUsers scope
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Usuario instaladoUser installed
Ámbito CurrentUserCurrentUser scope
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

En los ejemplos siguientes se muestran los valores predeterminados de $Env:PSModulePath para cada versión.The following examples show the default values of $Env:PSModulePath for each version.

  • Para Windows PowerShell 5.1:For 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:For 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.Notice that PowerShell 7 includes the Windows PowerShell paths and the PowerShell 7 paths to provide autoloading of modules.

Nota

Pueden existir rutas de acceso adicionales si ha cambiado la variable de entorno PSModulePath o ha instalado módulos o aplicaciones personalizados.Additional paths may exist if you have changed the PSModulePath environment variable or installed custom modules or applications.

Para más información, consulte PSModulePath en about_Environment_Variables.For more information, see PSModulePath in about_Environment_Variables.

Para más información sobre los módulos, consulte about_Modules.For more information about Modules, see about_Modules.

Perfiles independientesSeparate profiles

Un perfil de PowerShell es un script que se ejecuta cuando se inicia PowerShell.A PowerShell profile is a script that executes when PowerShell starts. Este script agrega comandos, alias, funciones, variables, módulos y unidades de PowerShell para personalizar el entorno.This script customizes your environment by adding commands, aliases, functions, variables, modules, and PowerShell drives. El script de perfil permite que estas personalizaciones estén disponibles en cada sesión sin tener que volver a crearlas manualmente.The profile script makes these customizations available in every session without having to manually recreate them.

La ruta de acceso a la ubicación del perfil ha cambiado en PowerShell 7.The path to the location of the profile has changed in PowerShell 7.

  • En Windows PowerShell 5.1, la ubicación del perfil es $HOME\Documents\WindowsPowerShell.In Windows PowerShell 5.1, the location of the profile is $HOME\Documents\WindowsPowerShell.
  • En PowerShell 7, la ubicación del perfil es $HOME\Documents\PowerShell.In PowerShell 7, the location of the profile is $HOME\Documents\PowerShell.

Los nombres de archivo de perfil también han cambiado:The profile filenames have also changed:

PS> $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.For more information about_Profiles.

Compatibilidad de PowerShell 7 con los módulos de Windows PowerShell 5.1PowerShell 7 compatibility with Windows PowerShell 5.1 modules

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.Most of the modules you use in Windows PowerShell 5.1 already work with PowerShell 7, including Azure PowerShell and 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.We're continuing to work with other teams to add native PowerShell 7 support for more modules including Microsoft Graph, Office 365, and others. Puede encontrar la lista actual de los módulos compatibles admitidos en Compatibilidad del módulo de PowerShell 7.For the current list of supported modules, see PowerShell 7 module compatibility.

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.On Windows, we've also added a UseWindowsPowerShell switch to Import-Module to ease the transition to PowerShell 7 for those using incompatible modules. Para más información sobre esta funcionalidad, consulte about_Windows_PowerShell_Compatibility.For more information on this functionality, see about_Windows_PowerShell_Compatibility.

Comunicación remota de PowerShellPowerShell Remoting

La comunicación remota de PowerShell le permite ejecutar cualquier comando de PowerShell en uno o varios equipos remotos.PowerShell remoting lets you run any PowerShell command on one or more remote computers. Puede establecer conexiones persistentes, iniciar sesiones interactivas y ejecutar scripts en equipos remotos.You can establish persistent connections, start interactive sessions, and run scripts on remote computers.

Comunicación remota de WS-ManagementWS-Management remoting

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.Windows PowerShell 5.1 and below use the WS-Management (WSMAN) protocol for connection negotiation and data transport. Administración remota de Windows (WinRM) usa el protocolo WSMAN.Windows Remote Management (WinRM) uses the WSMAN protocol. 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.If WinRM has been enabled, PowerShell 7 uses the existing Windows PowerShell 5.1 endpoint named Microsoft.PowerShell for remoting connections. Para actualizar PowerShell 7 de forma que incluya su propio punto de conexión, ejecute el cmdlet Enable-PSRemoting.To update PowerShell 7 to include its own endpoint, run the Enable-PSRemoting cmdlet. Para información sobre cómo conectarse a puntos de conexión específicos, consulte Comunicación remota de WS-Management en PowerShell Core.For information about connecting to specific endpoints, see WS-Management Remoting in PowerShell Core

Para usar la comunicación remota de Windows PowerShell, el equipo remoto debe estar configurado para la administración remota.To use Windows PowerShell remoting, the remote computer must be configured for remote management. Para más información y ver instrucciones, consulte About Remote Requirements (Acerca de los requisitos remotos).For more information, including instructions, see About Remote Requirements.

Para más información sobre la comunicación remota, consulte Acerca de la comunicación remota.For more information about working with remoting, see About Remote

Comunicación remota basada en SSHSSH-based remoting

La comunicación remota basada en SSH se agregó en PowerShell Core 6 para lograr la compatibilidad con otros sistemas operativos que no pueden usar componentes nativos de Windows como WinRM.SSH-based remoting was added in PowerShell Core 6.x to support other operating systems that can't use Windows native components like WinRM. La comunicación remota mediante SSH crea un proceso de host de PowerShell en el equipo de destino como un subsistema SSH.SSH remoting creates a PowerShell host process on the target computer as an SSH subsystem. 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.For details and examples on setting up SSH-based remoting on Windows or Linux, see: PowerShell remoting over 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.The PowerShell Gallery (PSGallery) contains a module and cmdlet that automatically configures SSH-based remoting. Instale el módulo Microsoft.PowerShell.RemotingTools desde PSGallery y ejecute el cmdlet Enable-SSH.Install the Microsoft.PowerShell.RemotingTools module from the PSGallery and run the Enable-SSH cmdlet.

Los cmdlets New-PSSession, Enter-PSSession y Invoke-Command tienen nuevos conjuntos de parámetros que admiten conexiones SSH.The New-PSSession, Enter-PSSession, and Invoke-Command cmdlets have new parameter sets to support SSH connections.

[-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.To create a remote session, specify the target computer with the HostName parameter and provide the user name with UserName. Al ejecutar los cmdlets de forma interactiva, se le pedirá una contraseña.When running the cmdlets interactively, you're prompted for a password.

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.Alternatively, when using the HostName parameter, provide the username information followed by the at sign (@), followed by the computer name.

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.You may set up SSH key authentication using a private key file with the KeyFilePath parameter. Para más información, consulte Administración de claves de OpenSSH.For more information, see OpenSSH Key Management.

Compatibilidad con directiva de grupoGroup Policy supported

PowerShell incluye opciones de directiva de grupo para ayudarle a definir valores de opción coherentes para los servidores de un entorno empresarial.PowerShell includes Group Policy settings to help you define consistent option values for servers in an enterprise environment. Esta configuración incluye:These settings include:

  • Configuración de la sesión de la consola: establece un punto de conexión de configuración en el que se ejecuta PowerShell.Console session configuration: Sets a configuration endpoint in which PowerShell is run.
  • Activación del registro de módulos: establece la propiedad LogPipelineExecutionDetails de los módulos.Turn on Module Logging: Sets the LogPipelineExecutionDetails property of modules.
  • Activación del registro del bloque de scripts de PowerShell: permite el registro detallado de todos los scripts de PowerShell.Turn on PowerShell Script Block Logging: Enables detailed logging of all PowerShell scripts.
  • Activación de la ejecución de scripts: establece la directiva de ejecución de PowerShell.Turn on Script Execution: Sets the PowerShell execution policy.
  • 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.Turn on PowerShell Transcription: enables capturing of input and output of PowerShell commands into text-based transcripts.
  • 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.Set the default source path for Update-Help: Sets the source for Updatable Help to a directory, not the Internet.

Para más información, consulte about_Group_Policy_Settings.For more information, see about_Group_Policy_Settings.

PowerShell 7 incluye plantillas de directiva de grupo y un script de instalación en $PSHOME.PowerShell 7 includes Group Policy templates and an installation script in $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.Group Policy tools use administrative template files (.admx, .adml) to populate policy settings in the user interface. Esto permite a los administradores administrar la configuración de directiva basada en el registro.This allows administrators to manage registry-based policy settings. El script InstallPSCorePolicyDefinitions.ps1 instala las plantillas administrativas de PowerShell Core en la máquina local.The InstallPSCorePolicyDefinitions.ps1 script installs PowerShell Core Administrative Templates on the local machine.

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 independientesSeparate Event Logs

Windows PowerShell y PowerShell 7 anotan los eventos en registros independientes.Windows PowerShell and PowerShell 7 log events to separate event logs. Use el siguiente comando para obtener una lista de los registros de PowerShell.Use the following command to get a list of the PowerShell logs.

Get-WinEvent -ListLog *PowerShell*

Para más información, consulte about_Logging_Windows.For more information, see about_Logging_Windows.

Experiencia de edición mejorada con Visual Studio CodeImproved editing experience with Visual Studio Code

Visual Studio Code (VSCode) con la extensión de PowerShell es el entorno de scripting admitido para PowerShell 7.Visual Studio Code (VSCode) with the PowerShell Extension is the supported scripting environment for PowerShell 7. El Entorno de script integrado (ISE) de Windows PowerShell solo admite Windows PowerShell.The Windows PowerShell Integrated Scripting Environment (ISE) only supports Windows PowerShell.

La extensión de PowerShell actualizada incluye:The updated PowerShell extension includes:

  • Nuevo modo de compatibilidad con el ISENew ISE compatibility mode
  • PSReadLine en la consola integrada, que incluye el resaltado de la sintaxis, la edición de varias líneas y la búsqueda inversaPSReadLine in the Integrated Console, including syntax highlighting, multi-line editing, and back search
  • Mejoras en el rendimiento y la estabilidadStability and performance improvements
  • Nueva integración de CodeLensNew CodeLens integration
  • Finalización automática de la ruta de acceso mejoradaImproved path auto-completion

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.To make the transition to Visual Studio Code easier, use the Enable ISE Mode function available in the Command Palette. Esta función cambia VSCode a un diseño de estilo ISE.This function switches VSCode into an ISE-style layout. El diseño de estilo ISE le proporciona todas las características y funcionalidades nuevas de PowerShell en una experiencia de usuario conocida.The ISE-style layout gives you all the new features and capabilities of PowerShell in a familiar user experience.

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).To switch to the new ISE layout, press Ctrl+Shift+P to open the Command Palette, type PowerShell and select PowerShell: Enable ISE Mode.

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]).To set the layout to the original layout, open the Command Palette, select PowerShell: Disable ISE Mode (restore to defaults).

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.For details about customizing the VSCode layout to ISE, see How to Replicate the ISE Experience in Visual Studio Code

Nota

No hay planes de actualizar el ISE con nuevas características.There no plans to update the ISE with new features. El ISE es ahora una característica que puede desinstalar el usuario en las versiones más recientes de Windows 10 y Windows Server.The ISE is now a user-uninstallable feature in the latest versions of Windows 10 and Windows Server. No hay planes de quitar el ISE de forma permanente.There are no plans to permanently remove the ISE. 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.The PowerShell Team and its partners are focused on improving the scripting experience in the PowerShell extension for Visual Studio Code.

Pasos siguientesNext Steps

Ahora que posee los conocimientos para realizar la migración de forma efectiva, instale PowerShell 7 ya mismo.Armed with the knowledge to effectively migrate, install PowerShell 7 now!