Compartir a través de


Novedades en PowerShell 7.1

El 11 de noviembre de 2020 anunciamos la disponibilidad general de PowerShell 7.1. Basándonos en la base establecida en PowerShell 7.0, nuestros esfuerzos se centraron en cuestiones comunitarias e incluyen varias mejoras y soluciones. Estamos comprometidos a garantizar que PowerShell siga siendo una plataforma estable y con buen rendimiento.

PowerShell 7.1 incluye las siguientes funciones, actualizaciones y cambios de última hora.

  • PSReadLine 2.1.0, que incluye IntelliSense Predictivo
  • PowerShell 7.1 ha sido publicado en la Microsoft Store
  • Paquetes de instaladores actualizados para nuevas versiones del sistema operativo con soporte para ARM64
  • 4 nuevas características experimentales y 2 características experimentales promovidas al mercado principal
  • Varios cambios de última hora para mejorar la usabilidad

Para obtener una lista completa de los cambios, consulte el CHANGELOG de en el repositorio de GitHub.

PSReadLine 2.1.0

PowerShell 7.1 también incluye PSReadLine 2.1.0. Esta versión incluye Predictive IntelliSense. Para más información sobre la función Predictive IntelliSense, consulta el anuncio en el blog de PowerShell.

Paquete de instalación de la Microsoft Store

PowerShell 7.1 ha sido publicado en la Microsoft Store. Puedes encontrar la versión de PowerShell en la web de Microsoft Store o en la aplicación Store de Windows.

Ventajas del paquete de Microsoft Store:

  • Actualizaciones automáticas integradas en Windows
  • Se integra con otros mecanismos de distribución de software como Intune y SCCM

Nota:

Ninguna configuración a nivel de sistema almacenada $PSHOME no puede modificarse. Esto incluye la configuración de WSMAN. Esto impide que las sesiones remotas se conecten a instalaciones basadas en el almacén de PowerShell. Se admiten las configuraciones de nivel de usuario y la comunicación remota de SSH.

Otros instaladores

Para más información up-tofecha sobre sistemas operativos compatibles y ciclo de vida de soporte, consulte el Ciclo de Vida de Soporte de PowerShell.

Consulta las instrucciones de instalación de tu sistema operativo preferido:

Además, PowerShell 7.1 soporta versiones ARM32 y ARM64 de Debian, Ubuntu y ARM64 Alpine Linux.

Aunque no está oficialmente soportado, la comunidad también ha proporcionado paquetes para Arch y Kali Linux.

Nota:

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine y Arm actualmente no soportan remotos de WinRM. Para detalles sobre cómo configurar el remoto basado en SSH, véase PowerShell Remoting sobre SSH.

Características experimentales

Para obtener más información sobre las características experimentales, vea Using Experimental Features.

Las siguientes características experimentales son ahora características principales en esta versión:

Las siguientes características experimentales se añadieron en esta versión:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 amplía esta función experimental para añadir el parámetro Runspace a todos *-PSBreakpoint los cmdlets. El parámetro de Runspace especifica que un objeto Runspace interactúa con los puntos de interrupción en el espacio especificado.
  • PSNativePSPathResolution - Esta función te permite pasar rutas de proveedor PowerShell a comandos nativos que no soportan la sintaxis de rutas PowerShell.

  • PSCultureInvariantReplaceOperator - Cuando el operando izquierdo en una -replace sentencia de operador no es una cadena, ese operando se convierte en una cadena. Con la función activada, la conversión no utiliza la configuración de Cultura para la conversión de cadenas.

  • PSSubsystemPluginModel sienta las bases para soportar futuros complementos Predictive IntelliSense.

Cambios y mejoras de ruptura

  • El comportamiento de comparación de cadenas cambió en .NET 5.0

    PowerShell 7.1 está construido sobre .NET 5.0, que introdujo el siguiente cambio de ruptura:

    A partir de .NET 5.0, las comparaciones de cadenas invariantes a cultura ignoran los caracteres de control que no son imprimibles.

    Por ejemplo, las siguientes dos cadenas se consideran idénticas:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Corrección $? para que no esté $false cuando el comando nativo escribe en stderr (#13395)

    Es común que los comandos nativos escriban sin stderr intención de indicar un fallo. Con este cambio $? , solo se establece $false cuando el comando nativo también tiene un código de salida distinto de cero. Este cambio no está relacionado con la característica PSNotApplyErrorActionToStderrexperimental .

  • No afectar $ErrorActionPreferencestderr la salida de comandos nativos (#13361)

    Es común que los comandos nativos escriban sin stderr intención de indicar un fallo. Con este cambio, stderr la salida sigue capturándose en objetos ErrorRecord , pero el tiempo de ejecución ya no se aplica $ErrorActionPreference si el ErrorRecord proviene de un comando nativo.

  • Renombrar -FromUnixTime a -UnixTimeSeconds ON Get-Date para permitir la entrada de tiempo Unix (#13084) (Gracias @aetos382!)

    El -FromUnixTime parámetro se añadió durante la versión 7.1-preview.2. El parámetro fue renombrado para ajustarse mejor al tipo de dato. Este parámetro toma un valor entero que representa en segundos desde el 1 de enero de 1970, 0:00:00.

    Este ejemplo convierte una hora Unix (representada por el número de segundos desde 1970-01-01 0:00:00) en Fecha.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Permitir que el parámetro especificado con nombre sea explícitamente reemplazado por el mismo que el splatting de la tabla hash (#13162)

    Con este cambio, los parámetros nombrados del splatting se trasladan al final de la lista de parámetros para que queden vinculados después de que todos los parámetros nombrados explícitamente especificados estén vinculados. La vinculación de parámetros para funciones simples no genera un error cuando no se puede encontrar un parámetro especificado con nombre. Los parámetros desconocidos con nombre están ligados al $args parámetro de la función simple. Al mover el splatting al final de la lista de argumentos cambia el orden en que aparecen los parámetros en $args.

    Por ejemplo:

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    En el comportamiento anterior, MyPath no está obligado a porque -Path es el tercer argumento en la lista de argumentos. ## Así que acaba metido en '$args' junto con Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    Con este cambio, los argumentos de @hash se trasladan al final de la lista de argumentos. MyPath se convierte en el primer argumento de la lista, por lo que está vinculado a -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Haz que el parámetro -Qualifier del switch no sea posicional para Split-Path (#12960) (Gracias @yecril71pl!)

  • Resuelve el directorio de trabajo como ruta literal para Start-Process cuando no está especificado (#11946) (Gracias @NoMoreFood!)

  • Haz que -OutFile el parámetro en los comandos web funcione como -LiteralPath (#11701) (Gracias @iSazonov!)

  • Corregir la vinculación de parámetros de cadena para BigInteger literales numéricos (#11634) (Gracias @vexx32!)

  • En Windows, Start-Process crea un entorno de procesos con todas las variables de la sesión actual, usando -UseNewEnvironment crea un nuevo entorno de proceso predeterminado (#10830) (Gracias @iSazonov!)

  • No envolver el resultado return al PSObject convertir a ScriptBlock en un delegado (#10619)

    Cuando a ScriptBlock se convierte en un tipo de delegado para usarse en el contexto de C#, envolver el resultado en a PSObject trae problemas innecesarios:

    • Cuando el valor se convierte al tipo de retorno de delegado, el PSObject esencialmente se desenrolla. Así que no PSObject es necesario.
    • Cuando el tipo de retorno de delegado es object, se envuelve en a PSObject , lo que dificulta trabajar con él en código C#.

    Tras este cambio, el objeto devuelto es el objeto subyacente.