Novedades de PowerShell 7.4

PowerShell 7.4 incluye las características, las actualizaciones y los cambios importantes que se indican a continuación. PowerShell 7.4 se basa en .NET 8.0.0.

Para ver la lista completa de cambios, consulte el REGISTRO DE CAMBIOS en el repositorio de GitHub.

Últimos cambios

  • Las imágenes de Docker de Nano Server no están disponibles para esta versión
  • Se ha agregado el parámetro ProgressAction a los parámetros comunes
  • Se han actualizado algunas API de PowerShell para generar ArgumentException en lugar de ArgumentNullException cuando el argumento es una cadena vacía (n.º 19215) (Gracias, @xtqqczze!)
  • Se quita el código relacionado con #requires -pssnapin (n.º 19320)
  • Test-Json ahora usa JsonSchema.Net en lugar de Newtonsoft.Json.Schema. Con este cambio, Test-Json ya no admite los esquemas anteriores de Draft 4. (#18141) (Gracias @gregsdennis!) Para obtener más información sobre los esquemas JSON, consulte la documentación sobre el Esquema JSON.
  • Ahora, la salida de Test-Connection incluye información más detallada sobre las pruebas de conexión TCP
  • .NET introdujo cambios que afectaron a Test-Connection. El cmdlet ahora devuelve un error sobre la necesidad de usar sudo en plataformas Linux al usar un tamaño de búfer personalizado (n.º 20369)
  • La característica experimental PSNativeCommandPreserveBytePipe ahora es estándar. PowerShell conserva ahora los datos de secuencia de bytes al redirigir la secuencia stdout de un comando nativo a un archivo o al canalización de datos de secuencia de bytes al flujo stdin de un comando nativo.
  • Cambio sobre cómo se controlan las rutas de acceso relativas de Resolve-Path al usar el parámetro RelativeBasePath (n.º 19755) (Gracias, @MartinGC94!)
  • Retirada del código PSv2 sin usar: quita la función TabExpansion (n.º 18337)

Actualizaciones del instalador

Ahora, el paquete MSI de Windows proporciona una opción para deshabilitar la telemetría de PowerShell durante la instalación. Para obtener más información, consulte Instalación del paquete MSI desde la línea de comandos.

Versiones actualizadas de PSResourceGet y PSReadLine

PowerShell 7.4 incluye Microsoft.PowerShell.PSResourceGet v1.0.1. Este módulo se instala en paralelo con PowerShellGet v2.2.5 y PackageManagement v1.4.8.1. Para obtener más información, consulte la documentación de Microsoft.PowerShell.PSResourceGet.

PowerShell 7.4 ahora incluye PSReadLine v2.3.4. Para más información, consulte la documentación de PSReadLine.

Mejoras de finalización con tabulación

Muchas gracias a @MartinGC94 y a los demás por todo el trabajo en la mejora de la finalización con tabulación.

  • Se ha corregido un problema al completar el primer comando de un script con una expresión de matriz vacía (n.º 18355)
  • Se ha corregido la finalización de argumentos posicionales (n.º 17796)
  • Se ha dado prioridad al conjunto de parámetros predeterminados al completar argumentos posicionales (n.º 18755)
  • Se ha mejorado el pseudoenlace de parámetros dinámicos (n.º 18030)
  • Se ha mejorado la inferencia de tipos de claves de la tabla hash (n.º 17907)
  • Se ha corregido el error de inferencia de tipos para instrucciones return vacías (n.º 18351)
  • Se ha mejorado la inferencia de tipos para Get-Random (n.º 18972)
  • Se ha corregido la inferencia de tipos de todas las variables de ámbito (n.º 18758)
  • Se ha mejorado la enumeración de tipos deducidos en la canalización (n.º 17799)
  • Se ha agregado finalización para valores en las comparaciones al comparar enumeraciones (n.º 17654)
  • Se ha agregado finalización de asignación de propiedades para enumeraciones (n.º 19178)
  • Se ha corregido la finalización de las propiedades de la variable PSCustomObject (n.º 18682)
  • Se ha corregido la finalización de miembros en el argumento de atributo (n.º 17902)
  • Excluir los alias de parámetro redundantes de los resultados de finalización (n.º 19382)
  • Se ha corregido la finalización de miembros de clase de clases con tipos base (n.º 19179)
  • Se ha agregado finalización para usar palabras clave (n.º 16514)
  • Reparar la fuga de variables TabExpansion2 al completar variables (n.º 18763)
  • Habilitar la finalización de variables en ámbitos de ScriptBlock (n.º 19819)
  • Reparar la finalización de la variable para la instrucción foreach (n.º 19814)
  • Reparar la prioridad de inferencia de tipos de variable (n.º 18691)
  • Reparar la finalización de miembros para la clase Enum de PowerShell (n.º 19740)
  • Reparar el análisis de literales de matriz en expresiones de índice en llamadas de método (n.º 19224)
  • Mejorar la finalización de la ruta de acceso (n.º 19489)
  • Corregir un error de indexación fuera del límite en CompleteInput para la entrada de script vacía (n.º 19501)
  • Mejorar el rendimiento de la finalización de variables (n.º 19595)
  • Mejorar la finalización de claves de tablas hash para asignaciones de variables restringidas de tipo, tablas hash anidadas y mucho más (n.º 17660)
  • Inferir la salida de la aplicación externa como cadenas (n.º 19193)
  • Actualizar la finalización de parámetros para que las enumeraciones excluyan los valores no permitidos por ValidateRange atributos (n.º 17750) (Gracias a @fflaten!).
  • Corregir la finalización de parámetros dinámicos (#19510)
  • Agregar finalización de variables asignadas por la instrucción Data (#19831)

Mejoras de cmdlets de web

Muchas gracias a @CarloToso y a los demás por todo el trabajo en la mejora de los cmdlets web.

  • Corrección de la descompresión en cmdlets web para incluir Brotli (n.º 17955) (Gracias a @iSazonov!)
  • Los cmdlets web agregan 308 para redirigir los códigos y la limpieza pequeña (n.º 18536)
  • Completar la representación de la barra de progreso en Invoke-WebRequest cuando se complete o cancele la descarga (n.º 18130)
  • Los cmdlets web obtienen el intervalo Retry-After de los encabezados de respuesta si el código de estado es 429 (n.º 18717)
  • Los cmdlets web establecen la codificación de conjunto de caracteres predeterminada en UTF8 (n.º 18219)
  • Se conserva WebSession.MaximumRedirection frente a cambios (n.º 19190)
  • Los cmdlets web analizan la declaración XML para obtener el valor de codificación, si está presente. (n.º 18748)
  • Corrección mediante xml -Body en cmdlets web sin codificación (n.º 19281)
  • Se ha ajustado el comportamiento del método PUT al POST para el tipo de contenido predeterminado en cmdlets web (n.º 19152)
  • Se tiene en cuenta ContentType de encabezados en cmdlets web (n.º 19227)
  • Permitir la conservación del método HTTP original agregando -PreserveHttpMethodOnRedirect a cmdlets web (n.º 18894)
  • Los cmdlets web muestran un error en la redirección de https a http (n.º 18595)
  • Agregar el modificador AllowInsecureRedirect a cmdlets web (n.º 18546)
  • Se ha mejorado el mensaje detallado en cmdlets web cuando se desconoce la longitud del contenido (n.º 19252)
  • Compilar el URI relativo de los vínculos de la respuesta en Invoke-WebRequest (n.º 19092)
  • Reparar el redireccionamiento para -CustomMethod POST en cmdlets web (n.º 19111)
  • Se ha eliminado la respuesta anterior en cmdlets web (n.º 19117)
  • Mejorar el formato de los errores de xml y json Invoke-WebRequest (n.º 18837)
  • Agregar validateNotNullOrEmpty a los parámetros OutFile e InFile de cmdlets web (n.º 19044)
  • Se ha actualizado la lista de encabezados de httpKnownHeaderNames (n.º 18947)
  • Invoke-RestMethod -FollowRelLink repara los vínculos que contienen comas (n.º 18829)
  • Se ha corregido un error al administrar el redireccionamiento y keepAuthorization en cmdlets web (n.º 18902)
  • Agregar StatusCode a HttpResponseException (n.º 18842)
  • Compatibilidad con conexiones HTTP persistentes en cmdlets web (n.º 19249) (Gracias, @stevenebutler!)
  • Limpieza pequeña Invoke-RestMethod (n.º 19490)
  • Mejorar el mensaje detallado de cmdlets web para mostrar la versión HTTP correcta (n.º 19616)
  • Agregar FileNameStar a MultipartFileContent en cmdlets web (n.º 19467)
  • Corregir el estado HTTP de 409 a 429 para que los cmdlets web obtengan el intervalo de reintento del encabezado Retry-After. (n.º 19622) (Gracias a @mkht!)
  • Cambiar -TimeoutSec a -ConnectionTimeoutSeconds y agregar -OperationTimeoutSeconds a cmdlets web (n.º 19558) (Gracias a @stevenebutler!) otros cmdlets
  • Compatibilidad con Ctrl+c cuando la conexión se bloquea mientras se leen datos en cmdlets web (n.º 19330) (gracias a @stevenebutler!)
  • Compatibilidad con el socket de dominio unix en WebCmdlets (#19343)

Otras mejoras de cmdlets

  • Test-Connection ahora devuelve un error sobre la necesidad de usar sudo en plataformas Linux al usar un tamaño de búfer personalizado (n.º 20369)
  • Se agregan tipos de salida a los comandos Format (n.º 18746) (gracias a @MartinGC94!)
  • Se agregan atributos de tipo de salida para Get-WinEvent (n.º 17948) (gracias a @MartinGC94!)
  • Añada los parámetros Path y LiteralPath al cmdlet Test-Json (#19042) (Gracias, @ArmaanMcleod!)
  • Añada el parámetro NoHeader a los cmdlets ConvertTo-Csv y Export-Csv (#19108) (Gracias, @ArmaanMcleod!)
  • Se han agregado los parámetros Confirm y WhatIf a Stop-Transcript(#18731) (Gracias, @JohnLBevan!)
  • Se ha agregado el parámetro FuzzyMinimumDistance a Get-Command (#18261)
  • Se ha habilitado la aceptación de codificación ANSI por parte del parámetro Encoding en PowerShell ( 19298) (Gracias, @CarloToso!)
  • Agregar progreso a Copy-Item (#18735)
  • Update-Help ahora notifica un error al usar la referencia cultural implícita en sistemas ajenos a EE. UU. (#17780) (Gracias, @dkaszews!)
  • No se requiere actividad al crear un registro de progreso completado (n.º 18474) (Gracias a @MartinGC94!)
  • No se permiten valores negativos para Get-Content parámetros de cmdlet -Head y -Tail (n.º 19715) (gracias a @CarloToso!)
  • Hace que Update-Help genere un error adecuado cuando la referencia cultural actual no esté asociada a un idioma (n.º 19765) (Gracias a @josea!)
  • Se permite la combinación de parámetros -Skip y -SkipLast en el cmdlet Select-Object. (n.º 18849) (gracias a @ArmaanMcleod!)
  • Se agrega el cmdlet Get-SecureRandom (n.º 19587)
  • Set-Clipboard -AsOSC52 para uso remoto (n.º 18222) (gracias a @dkaszews!)
  • Acelerar la resolución de rutas relativas Resolve-Path (n.º 19171) (gracias a @MartinGC94!)
  • Se agregó el parámetro switch -CaseInsensitive a Select-Object y cmdlets de Get-Unique (#19683) (Gracias @ArmaanMcleod!)
  • Restart-Computer y Stop-Computer deben producir un error al no ejecutarse a través de sudo en Unix (#19824)

Mejoras del motor

Actualizaciones para el $PSStyle

  • Se han agregado las propiedades Dim y DimOff (#18653)
  • Se han agregado métodos estáticos a la clase PSStyle que asignan los valores ConsoleColor de primer plano y de fondo a secuencias de escape ANSI (#17938)
  • Los encabezados de tabla para los campos calculados tienen un formato en cursiva de forma predeterminada
  • Se agrega compatibilidad con el respeto de $PSStyle.OutputRendering en el host remoto (n.º 19601)
  • Datos de telemetría actualizados para incluir el uso de módulos de CrescendoBuilt (n.º 20371)

Otras actualizaciones del motor

  • Se ha hecho que no se afilie la clase de PowerShell con el espacio de ejecución al declarar el atributo NoRunspaceAffinity (#18138)
  • Se ha agregado el atributo ValidateNotNullOrWhiteSpace (#17191) (Gracias, @wmentha!)
  • Se ha agregado sqlcmd a la lista para pasar argumentos heredados (#18559)
  • Se ha agregado la función cd~ (#18308) (Gracias, @GigaScratch!)
  • Se corrige el análisis de tipos de matriz en tipos genéricos (n.º 19205) (gracias a @MartinGC94!)
  • Se corrige el uso global de caracteres comodín en la raíz de las rutas de acceso del dispositivo (n.º 19442) (gracias a @MartinGC94!)
  • Se agrega una API pública para obtener ubicaciones de elementos PSModulePath (n.º 19422)
  • Se corrige una cadena incorrecta para la conversión de tipos (n.º 19560) (gracias a @MartinGC94!)
  • Se corrige la ejecución lenta cuando se usan muchos puntos de interrupción (n.º 14953) (gracias a @nohwnd!)
  • Se quita el código relacionado con #requires -pssnapin (n.º 19320)

Características experimentales

PowerShell 7.4 presenta las siguientes características experimentales:

  • PSFeedbackProvider: reemplaza el marco de sugerencias codificado de forma rígida por un proveedor de comentarios extensible.
    • Esta característica también agrega las propiedades FeedbackName, FeedbackText y FeedbackAction a $PSStyle.Formatting que permiten cambiar el formato de los mensajes de comentarios.
  • PSModuleAutoLoadSkipOfflineFiles: la detección de módulos ahora omite los archivos marcados por proveedores de nube como no totalmente en el disco.
  • PSCommandWithArgs: se ha agregado compatibilidad para pasar argumentos a comandos como una sola cadena

Se han estandarizado las siguientes características experimentales:

PowerShell 7.4 cambió las siguientes características experimentales:

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