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, consulta la documentación sobre el Esquema JSON. Esto también interrumpeTest-Json
para archivos JSON y JSONC con comentarios. - La compatibilidad con
ConvertFrom-Json
todavía usa Newtonsoft.Json.Schema para que pueda convertir archivos JSON con comentarios.
- Con este cambio,
- 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 usarsudo
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)
- Corrección de la expansión de tilde de la ñ (
~
) en sistemas Windows para$home
a fin de evitar casos de uso importantes con comandos nativos (#21529)
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 usarsudo
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
yExport-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 cmdletSelect-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
aSelect-Object
y cmdlets deGet-Unique
(#19683) (Gracias @ArmaanMcleod!) Restart-Computer
yStop-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.
- Esta característica también agrega las propiedades FeedbackName, FeedbackText y FeedbackAction a
- 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:
- PSConstrainedAuditLogging
- PSCustomTableHeaderLabelDecoration
- PSNativeCommandErrorActionPreference
- PSNativeCommandPreserveBytePipe
- PSWindowsNativeCommandArgPassing
PowerShell 7.4 cambió las siguientes características experimentales:
- PSCommandNotFoundSuggestion: esta característica ahora usa un proveedor de comentarios extensible en lugar de sugerencias codificadas de forma rígida (n.º 18726)
Para más información sobre las características experimentales, consulte Uso de características experimentales en PowerShell.