Compartir a través de


Uso de características experimentales en PowerShell

La compatibilidad con las características experimentales de PowerShell proporciona un mecanismo para que las características experimentales coexistan con las características estables existentes en PowerShell o los módulos de PowerShell.

Una característica experimental es aquella en la que el diseño no ha finalizado. La característica está disponible para que los usuarios puedan probar y proporcionar comentarios. Una vez finalizada una característica experimental, los cambios de diseño se vuelven importantes.

Precaución

No está previsto que las características experimentales se usen en producción, ya que los cambios se pueden interrumpir. Las características experimentales no cuentan con soporte técnico oficial. Sin embargo, agradecemos los comentarios y los informes de errores. Puede informar de las incidencias en el repositorio de origen de GitHub.

Para obtener más información acerca de cómo habilitar o deshabilitar estas características, vea Acerca de las características experimentales.

Ciclo de vida de características experimentales

El cmdlet Get-ExperimentalFeature devuelve todas las características experimentales disponibles para PowerShell. Las características experimentales pueden proceder de módulos o del motor de PowerShell. Las características experimentales basadas en módulos solo están disponibles después de importar el módulo. En el ejemplo siguiente, no se carga el PSDesiredStateConfiguration, por lo que la característica PSDesiredStateConfiguration.InvokeDscResource no está disponible.

Get-ExperimentalFeature
Name                             Enabled Source   Description
----                             ------- ------   -----------
PSCommandNotFoundSuggestion        False PSEngine Recommend potential commands based on fuzzy searc…
PSCommandWithArgs                  False PSEngine Enable `-CommandWithArgs` parameter for pwsh
PSFeedbackProvider                  True PSEngine Replace the hard-coded suggestion framework with …
PSLoadAssemblyFromNativeCode       False PSEngine Expose an API to allow assembly loading from nati…
PSModuleAutoLoadSkipOfflineFiles    True PSEngine Module discovery will skip over files that are ma…
PSSerializeJSONLongEnumAsNumber     True PSEngine Serialize enums based on long or ulong as an nume…
PSSubsystemPluginModel              True PSEngine A plugin model for registering and un-registering…

Use los cmdlets Enable-ExperimentalFeature y Disable-ExperimentalFeature para habilitar o deshabilitar una característica. Debe iniciar una nueva sesión de PowerShell para que se aplique este cambio. Ejecute el siguiente comando para habilitar la característica PSCommandNotFoundSuggestion:

Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.

Cuando una característica experimental se convierte en estándar, ya no está disponible como una característica experimental porque la funcionalidad ahora forma parte del motor o módulo de PowerShell. Por ejemplo, la característica PSAnsiRenderingFileInfo se convirtió en estándar en PowerShell 7.3. Obtiene automáticamente la funcionalidad de la característica.

Nota:

Algunas características tienen requisitos de configuración, como variables de preferencia, que deben establecerse para obtener los resultados deseados de la característica.

Cuando se interrumpe una característica experimental, esa característica ya no está disponible en PowerShell. Por ejemplo, la característica PSNativePSPathResolution se descontinuó en PowerShell 7.3.

Características disponibles

En este artículo se describen las características experimentales que están disponibles y cómo usarlas.

Leyenda

  • El icono Experimental indica que la característica experimental está disponible en la versión de PowerShell
  • El icono Mainstream indica la versión de PowerShell donde la característica experimental ya es estándar
  • El icono Discontinued indica la versión de PowerShell donde la característica experimental se ha eliminado
Nombre 7.4 7.5 7.6 (versión preliminar)
PSCommandNotFoundSuggestion Experimental Estándar Estándar
PSDesiredStateConfiguration.InvokeDscResource Experimental Experimental Experimental
PSSubsystemPluginModel Experimental Experimental Experimental
PSLoadAssemblyFromNativeCode Experimental Experimental Experimental
PSFeedbackProvider Experimental Experimental Experimental
PSModuleAutoLoadSkipOfflineFiles Experimental Estándar Estándar
PSCommandWithArgs Experimental Estándar Estándar
PSNativeWindowsTildeExpansion Experimental Experimental
PSRedirectToVariable Experimental Experimental
PSSerializeJSONLongEnumAsNumber Experimental Experimental

PSCommandNotFoundSuggestion

Nota:

Esta característica se convirtió en estándar en PowerShell 7.5.preview.5.

Recomienda comandos potenciales basados en la búsqueda de coincidencias aproximadas después de CommandNotFoundException.

PS> get
get: The term 'get' isn't recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.

Suggestion [4,General]: The most similar commands are: set, del, ft, gal, gbp, gc, gci,
gcm, gdr, gcs.

PSCommandWithArgs

Nota:

Esta característica se convirtió en estándar en PowerShell 7.5.preview.5.

Esta característica habilita el parámetro -CommandWithArgs para pwsh. Este parámetro permite ejecutar un comando de PowerShell con argumentos. A diferencia de -Command, este parámetro rellena la variable integrada $args que el comando puede usar.

La primera cadena es el comando y las cadenas subsiguientes delimitadas por espacios en blanco son los argumentos.

Por ejemplo:

pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2

Este ejemplo produce el siguiente resultado:

arg: arg1
arg: arg2

Esta característica se agregó en PowerShell 7.4.preview.2.

PSDesiredStateConfiguration.InvokeDscResource

Habilita la compilación en MOF en sistemas que no son de Windows y permite el uso de Invoke-DSCResource sin LCM.

A partir de PowerShell 7.2, se quitó el módulo PSDesiredStateConfiguration y esta característica está deshabilitada de manera predeterminada. Para habilitar esta característica, debe instalar el módulo PSDesiredStateConfiguration v2.0.5 desde la Galería de PowerShell y habilitarla.

DSC v3 no tiene esta característica experimental. DSC v3 solo admite Invoke-DSCResource y no usa ni admite la compilación MOF. Para obtener más información, vea Desired State Configuration v3 de PowerShell.

PSFeedbackProvider

Al habilitar esta característica, PowerShell usa un nuevo proveedor de comentarios para proporcionarle comentarios cuando no se encuentra un comando. El proveedor de comentarios es extensible y se puede implementar mediante módulos de terceros. Otros subsistemas, como el subsistema de predicción, pueden usar el proveedor de comentarios para proporcionar resultados predictivos de IntelliSense.

Esta característica incluye dos proveedores de comentarios integrados:

  • GeneralCommandErrorFeedback sirve para la misma funcionalidad de sugerencia existente en la actualidad

  • UnixCommandNotFound, disponible en Linux, proporciona comentarios similares a Bash.

    UnixCommandNotFound actúa como proveedor de comentarios y un predictor. La sugerencia del comando no encontrado se usa para proporcionar los comentarios cuando el comando no se encuentra en una ejecución interactiva y para proporcionar resultados predictivos de IntelliSense para la siguiente línea de comandos.

Esta característica se agregó en PowerShell 7.4-preview.3.

PSLoadAssemblyFromNativeCode

Expone una API para permitir la carga de ensamblados desde código nativo.

PSModuleAutoLoadSkipOfflineFiles

Nota:

Esta característica se convirtió en estándar en PowerShell 7.5.preview.5.

Con esta característica habilitada, si PSModulePath de un usuario contiene una carpeta de un proveedor de nube, como OneDrive, PowerShell ya no desencadena la descarga de todos los archivos contenidos en esa carpeta. Se omite cualquier archivo marcado como no descargado. Los usuarios que usan proveedores de nube para sincronizar sus módulos entre máquinas deben marcar la carpeta de módulos como Anclada o en el estado equivalente para proveedores distintos de OneDrive. Al marcar la carpeta de módulos como Anclada se garantiza que los archivos siempre se mantienen en el disco.

Esta característica se agregó en PowerShell 7.4-preview.1.

PSRedirectToVariable

Nota:

Esta característica experimental se agregó en PowerShell 7.5-preview.4.

Cuando está habilitada, esta característica agrega compatibilidad para redirigir a la unidad variable. Esta característica permite redirigir los datos a una variable mediante la sintaxis variable:name. PowerShell inspecciona el destino del redireccionamiento y, si usa el proveedor de variables, llama a Set-Variable en lugar de a Out-File.

En el ejemplo siguiente se muestra cómo redirigir la salida de un comando en una variable:

. {
    "Output 1"
    Write-Warning "Warning, Warning!"
    "Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!

PSSubsystemPluginModel

Esta característica habilita el modelo de complemento de subsistema en PowerShell. La característica permite separar componentes de System.Management.Automation.dll en subsistemas individuales que residen en su propio ensamblado. Esta separación reduce la superficie de memoria del disco del motor de PowerShell principal y permite que estos componentes se conviertan en características opcionales para una instalación mínima de PowerShell.

Actualmente, solo se admite el subsistema CommandPredictor. Este subsistema se usa junto con el módulo PSReadLine para proporcionar complementos de predicción personalizados. En el futuro, Job, CommandCompleter, Remoting y otros componentes podrían separarse en ensamblados de subsistema fuera de System.Management.Automation.dll.

La característica experimental incluye un nuevo cmdlet, Get-PSSubsystem. Este cmdlet solo está disponible cuando la característica está habilitada y devuelve información sobre los subsistemas que están disponibles en el sistema.

PSNativeWindowsTildeExpansion

Cuando esta característica está habilitada, PowerShell expande la tilde sin comillas (~) a la carpeta principal actual del usuario antes de invocar comandos nativos. En los ejemplos siguientes se muestra cómo funciona la característica.

Con la característica deshabilitada, la tilde se pasa al comando nativo como una cadena literal.

PS> cmd.exe /c echo ~
~

Con la característica habilitada, PowerShell expande la tilde antes de pasarla al comando nativo.

PS> cmd.exe /c echo ~
C:\Users\username

Esta característica solo se aplica a Windows. En plataformas que no son Windows, la expansión de tilde se controla de forma nativa.

Esta característica se ha agregado en PowerShell 7.5-preview.2.

PSSerializeJSONLongEnumAsNumber

Esta característica permite al cmdlet ConvertTo-Json serializar los valores de enumeración basados en Int64/long o UInt64/ulong como un valor numérico en lugar de la representación de cadena de ese valor de enumeración. Esto alinea el comportamiento de la serialización de enumeración con otros tipos base de enumeración donde el cmdlet serializa las enumeraciones como su valor numérico. Use el parámetro EnumsAsStrings para serializar como representación de la cadena.

Por ejemplo:

# PSSerializeJSONLongEnumAsNumber disabled
@{
    Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": "Cmdlets" }

# PSSerializeJSONLongEnumAsNumber enabled
@{
    Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": 32 }

# -EnumsAsStrings to revert back to the old behaviour
@{
    Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json -EnumsAsStrings
# { "Key": "Cmdlets" }