Novedades de PowerShell 7.3

PowerShell 7.3 es la siguiente versión estable, integrada en .NET 7.0.

PowerShell 7.3 incluye las características, las actualizaciones y los cambios importantes que se indican a continuación.

Últimos cambios y mejoras

  • En esta versión, las API de Windows se actualizaron o quitaron para el cumplimiento, lo que significa que PowerShell 7.3 no se ejecuta en Windows 7. Aunque ya no se admite Windows 7, las compilaciones anteriores podrían ejecutarse en Windows 7.
  • PowerShell Direct para Hyper-V solo se admite en Windows 10, a partir de la versión 1809.
  • Test-Connection se ha interrumpido debido a un cambio importante intencionado en .NET 7. Se realiza su seguimiento por #17018.
  • Adición del bloque clean al bloque de script como elemento del mismo nivel a begin, process y end para permitir una limpieza de recursos sencilla (n.º 15177)
  • Cambio del valor predeterminado de $PSStyle.OutputRendering a Host
  • Se ha hecho que Out-String y Out-File mantengan la entrada de cadena sin cambios (n.º 17455)
  • Se ha movido la definición de datos de tipo de System.Security.AccessControl.ObjectSecurity al módulo Microsoft.PowerShell.Security (n.º 16355) (¡Gracias @iSazonov!)!)
    • Antes de este cambio, un usuario no necesita importar explícitamente el módulo Microsoft.PowerShell.Security para usar las propiedades de código definidas para una instancia de System.Security.AccessControl.ObjectSecurity.
    • Después de este cambio, un usuario debe importar explícitamente el módulo Microsoft.PowerShell.Security para poder usar esas propiedades y métodos de código.

Mejoras de finalización con tabulación

  • PowerShell 7.3 incluye PSReadline 2.2.6, que habilita IntelliSense predictivo de forma predeterminada. Para más información, vea Acerca de PSReadLine.
  • Corrección de la finalización de tabulación dentro del bloque de script especificado para ValidateScriptAttribute. (N.º 14550) (¡Gracias @MartinGC94!)!)
  • Se ha agregado la finalización con tabulación para las etiquetas de bucle después de break/continue (n.º 16438) (¡Gracias @MartinGC94!)!)
  • Mejora de la finalización de la tabla hash en varios escenarios (n.º 16498) (¡Gracias @MartinGC94!)!)
    • Expansión de parámetros
    • Parámetro Arguments para Invoke-CimMethod
    • Parámetro FilterHashtable para Get-WinEvent
    • Parámetro Property para los cmdlets CIM
    • Quita los duplicados de los escenarios de finalización de miembros.
  • Compatibilidad con las barras diagonales en la finalización del recurso compartido de red (ruta de acceso UNC) (n.º 17111) (¡Gracias @sba923!)!)
  • Mejora de la finalización automática de miembros (n.º 16504) (¡Gracias @MartinGC94!)!)
  • Clasificación por orden de prioridad de las finalizaciones ValidateSet sobre enumeraciones de parámetros (n.º 15257) (¡Gracias @MartinGC94!)!)
  • Se ha agregado compatibilidad con la inferencia de tipos para métodos genéricos con parámetros de tipo (n.º 16951) (¡Gracias @MartinGC94!)!)
  • Se ha mejorado la inferencia de tipos y finalizaciones (n.º 16963) (¡Gracias @MartinGC94!)!)
    • Permite que los métodos se muestren en los resultados de finalización de ForEach-Object -MemberName.
    • Impide la finalización en expresiones que devuelven void, como ([void]("")).
    • Permite que los constructores de clase no predeterminados se muestren cuando la finalización de la clase se basa en AST.
  • Se ha mejorado la inferencia de tipos para $_ (n.º 17716) (¡Gracias @MartinGC94!)!)
  • Se ha corregido la inferencia de tipos para ICollection (n.º 17752) (¡Gracias @MartinGC94!)!)
  • Se ha evitado la eliminación de las llaves al completar variables (n.º 17751) (¡Gracias @MartinGC94!)!)
  • Se ha agregado la finalización de expresiones de índice para diccionarios (n.º 17619) (¡Gracias @MartinGC94!)!)
  • Se ha corregido la finalización de tipos para los tokens de atributo (n.º 17484) (¡Gracias @MartinGC94!)!)
  • Se ha mejorado la finalización de tabulación de parámetros dinámicos (n.º 17661)(¡Gracias @MartinGC94!)!)
  • Se ha evitado enlazar parámetros posicionales al completar el parámetro delante del valor (n.º 17693) (¡Gracias @MartinGC94!)!)

Se ha mejorado el control de errores

  • Establecimiento de $? correctamente para la expresión de comando con redireccionamientos (n.º 16046)
  • Corrección de un error de conversión al usar $PSNativeCommandUseErrorActionPreference (n.º 15993)
  • Respeto opcional del control de errores del comando nativo ErrorActionPreference (n.º 15897)
  • Especificar la ruta de acceso ejecutable como TargetObject para el código de salida distinto de cero ErrorRecord (n.º 16108) (¡Gracias @rkeithhill!)!)

Mejoras de sesión y comunicación remota

  • Agregar -Options al PSRP mediante comandos SSH para permitir pasar las opciones de OpenSSH directamente (n.º 12802) (¡Gracias @BrannenGH!)!)
  • Se ha agregado el parámetro -ConfigurationFile a pwsh para permitir iniciar un nuevo proceso con la configuración de sesión definida en un archivo .pssc (n.º 17447)
  • Se ha agregado compatibilidad para usar New-PSSessionConfigurationFile en plataformas que no sean de Windows (n.º 17447)

Se han actualizado los cmdlets:

  • Adición del parámetro -HttpVersion a los cmdlets web (n.º 15853) (¡Gracias @hayhay27!)!)
  • Adición de compatibilidad con cmdlets web para etiquetas de entrada abiertas (n.º 16193) (¡Gracias @farmerau!)!)
  • Corrección de ConvertTo-Json -Depth para permitir 100 como máximo (n.º 16197) (¡Gracias @KevRitchie!)@rkeithhill!)!)
  • Mejora del control de variables al llamar a Invoke-Command con la expresión $using: (n.º 16113) (¡Gracias @dwtaber!)!)
  • Se ha agregado -StrictMode a Invoke-Command para permitir que se especifique el modo strict al invocar el comando localmente (n.º 16545) (¡Gracias @Thomas-Yu!)!)
  • Adición del bloque clean al bloque de script como elemento del mismo nivel a begin, process y end para permitir una limpieza de recursos sencilla (n.º 15177)
  • Se ha agregado el modificador -Amended al cmdlet Get-CimClass (n.º 17477) (¡Gracias @iSazonov)!)
  • Se ha cambiado ConvertFrom-Json -AsHashtable para usar la tabla hash ordenada (n.º 17405)
  • Se han quitado secuencias de escape ANSI en cadenas antes de enviarlas a Out-GridView (n.º 17664)
  • Se ha agregado el parámetro Milliseconds a New-TimeSpan (n.º 17621) (¡Gracias @NoMoreFood!)!)
  • Visualización de parámetros opcionales al mostrar definiciones de método y sobrecargas (n.º 13799) (¡Gracias @eugenesmlv!)!)
  • Permiso para que los comandos se sigan ejecutando incluso si el directorio de trabajo actual ya no existe (n.º 17579)
  • Se ha agregado compatibilidad con HTTPS con Set-AuthenticodeSignature -TimeStampServer (n.º 16134) (¡Gracias @Ryan-Hutchison-USAF!)!)
  • Representación de números decimales en una tabla mediante la referencia cultural actual (n.º 17650)
  • Adición del acelerador de tipos ordenado para OrderedDictionary (n.º 17804) (¡Gracias @fflaten!)!)
  • Adición de find.exe al comportamiento de enlace de argumentos heredado para Windows (n.º 17715)
  • Adición de un modificador -noprofileloadtime a pwsh (n.º 17535) (¡Gracias @rkeithhill!)!)

Para ver la lista completa de cambios, consulte el registro de cambios en el repositorio de GitHub.

Características experimentales

En PowerShell 7.3, se han estandarizado las siguientes características experimentales:

  • PSAnsiRenderingFileInfo: Esta característica agrega el miembro $PSStyle.FileInfo y permite colorear tipos de archivo específicos.

  • PSCleanBlock: agrega el bloque clean al bloque de script como nodo del mismo nivel a begin, process y end para permitir una limpieza de recursos sencilla.

  • PSAMSIMethodInvocationLogging: extiende los datos que se envían a AMSI para su inspección para incluir todas las invocaciones de miembros del método .NET.

  • PSNativeCommandArgumentPassing: ahora, PowerShell usa la propiedad ArgumentList del objeto StartProcessInfo en lugar del mecanismo anterior de reconstrucción de una cadena al invocar un ejecutable nativo.

    PowerShell 7.3.1 agrega sqlcmd.exe a la lista de comandos nativos en Windows que usan el estilo Legacy de paso de argumentos.

  • PSExec: agrega el nuevo cmdlet de Switch-Process (alias exec) para ofrecer compatibilidad con exec para sistemas que no son de Windows.

    PowerShell 7.3.1 cambió el alias exec a una función que encapsula Switch-Process. La función permite pasar parámetros al comando nativo que podría haber enlazado erróneamente con el parámetro WithCommand.

PowerShell 7.3 presenta las siguientes características experimentales:

  • PSNativeCommandErrorActionPreference: $PSNativeCommandUseErrorActionPreference agrega la variable para permitir que los errores generados por los comandos nativos sean errores de PowerShell.

Se han eliminado las siguientes características experimentales de PowerShell 7.3:

  • La característica experimental PSNativePSPathResolution ya no se admite.
  • La característica experimental PSStrictModeAssignment ya no se admite.

Para más información sobre las características experimentales, consulte Uso de características experimentales en PowerShell.