Condividi tramite


Uso delle funzionalità sperimentali in PowerShell

Il supporto delle funzionalità sperimentali in PowerShell mette a disposizione un meccanismo per la coesistenza delle funzionalità sperimentali con le funzionalità stabili esistenti in PowerShell o nei moduli di PowerShell.

Una funzionalità sperimentale è quella in cui la progettazione non viene finalizzata. La funzionalità è disponibile per consentire agli utenti di testarla e offrire feedback. Dopo che una funzionalità sperimentale è stata finalizzata, le modifiche alla progettazione diventano modifiche che causano un'interruzione.

Attenzione

Le funzionalità sperimentali non sono destinate all'uso nell'ambiente di produzione perché in tali funzionalità le modifiche che causano un'interruzione sono consentite. Le funzionalità sperimentali non sono ufficialmente supportate. Qualsiasi feedback e report sui bug, tuttavia, è molto gradito. È possibile registrare i problemi nel repository di origine di GitHub.

Per altre informazioni sull'abilitazione o la disabilitazione di queste funzionalità, vedere Informazioni sulle funzionalità sperimentali.

Ciclo di vita delle funzionalità sperimentali

Il cmdlet Get-ExperimentalFeature restituisce tutte le funzionalità sperimentali disponibili per PowerShell. Le funzionalità sperimentali possono provenire da moduli o dal motore di PowerShell. Le funzionalità sperimentali basate su moduli sono disponibili solo dopo l'importazione del modulo. Nell'esempio seguente PSDesiredStateConfiguration non viene caricato, quindi la PSDesiredStateConfiguration.InvokeDscResource funzionalità non è disponibile.

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…

Usare i cmdlet Enable-ExperimentalFeature e Disable-ExperimentalFeature per abilitare o disabilitare una funzionalità. Per rendere effettiva questa modifica, è necessario avviare una nuova sessione di PowerShell. Eseguire il comando seguente per abilitare la PSCommandNotFoundSuggestion funzionalità:

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

Quando una funzionalità sperimentale diventa mainstream, non è più disponibile come funzionalità sperimentale perché la funzionalità fa ora parte del motore o del modulo di PowerShell. Ad esempio, la PSAnsiRenderingFileInfo funzionalità è diventata mainstream in PowerShell 7.3. Si ottiene automaticamente la funzionalità della funzionalità.

Nota

Alcune funzionalità hanno requisiti di configurazione, ad esempio le variabili di preferenza, che devono essere impostate per ottenere i risultati desiderati dalla funzionalità.

Quando una funzionalità sperimentale non è più disponibile in PowerShell, tale funzionalità non è più disponibile. Ad esempio, la PSNativePSPathResolution funzionalità è stata sospesa in PowerShell 7.3.

Funzionalità disponibili

Questo articolo descrive le funzionalità sperimentali disponibili e come usare ognuna di esse.

Legenda

  • L'icona Sperimentale indica che la funzionalità sperimentale è disponibile nella versione di PowerShell
  • L'icona Mainstream indica la versione di PowerShell in cui la funzionalità sperimentale è diventata mainstream
  • L'icona Sospeso indica la versione di PowerShell in cui è stata rimossa la funzionalità sperimentale
Nome 7.4 7.5 7.6 (anteprima)
PSCommandNotFoundSuggestion Sperimentale Mainstream Mainstream
PSDesiredStateConfiguration.InvokeDscResource Sperimentale Sperimentale Sperimentale
PSSubsystemPluginModel Sperimentale Sperimentale Sperimentale
PSLoadAssemblyFromNativeCode Sperimentale Sperimentale Sperimentale
PSFeedbackProvider Sperimentale Sperimentale Sperimentale
PSModuleAutoLoadSkipOfflineFiles Sperimentale Mainstream Mainstream
PSCommandWithArgs Sperimentale Mainstream Mainstream
PSNativeWindowsTildeExpansion Sperimentale Sperimentale
PSRedirectToVariable Sperimentale Sperimentale
PSSerializeJSONLongEnumAsNumber Sperimentale Sperimentale

PSCommandNotFoundSuggestion

Nota

Questa funzionalità è diventata mainstream in PowerShell 7.5-preview.5.

Consiglia comandi possibili in base a una ricerca di corrispondenze fuzzy dopo un errore 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

Questa funzionalità è diventata mainstream in PowerShell 7.5-preview.5.

Questa funzionalità abilita il -CommandWithArgs parametro per pwsh. Questo parametro consente di eseguire un comando di PowerShell con argomenti. A differenza di -Command, questo parametro popola la $args variabile predefinita che può essere usata dal comando .

La prima stringa è il comando e le stringhe successive delimitate da spazi vuoti sono gli argomenti.

Ad esempio:

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

Nell'esempio viene prodotto l'output seguente:

arg: arg1
arg: arg2

Questa funzionalità è stata aggiunta in PowerShell 7.4-preview.2.

PSDesiredStateConfiguration.InvokeDscResource

Consente la compilazione in formato MOF nei sistemi non Windows e l'uso di Invoke-DSCResource senza Gestione configurazione locale.

A partire da PowerShell 7.2, il modulo PSDesiredStateConfiguration è stato rimosso e questa funzionalità è disabilitata per impostazione predefinita. Per abilitare questa funzionalità, è necessario installare il modulo PSDesiredStateConfiguration v2.0.5 da PowerShell Gallery e abilitare la funzionalità.

DSC v3 non dispone di questa funzionalità sperimentale. DSC v3 supporta Invoke-DSCResource solo e non usa o supporta la compilazione MOF. Per altre informazioni, vedere PowerShell Desired State Configuration v3.

PSFeedbackProvider

Quando si abilita questa funzionalità, PowerShell usa un nuovo provider di commenti e suggerimenti per inviare commenti e suggerimenti quando non è possibile trovare un comando. Il provider di feedback è estendibile e può essere implementato da moduli di terze parti. Il provider di feedback può essere usato da altri sottosistemi, ad esempio il sottosistema predictor, per fornire risultati intelliSense predittivi.

Questa funzionalità include due provider di feedback predefiniti:

  • GeneralCommandErrorFeedback offre la stessa funzionalità di suggerimento esistente oggi

  • UnixCommandNotFound, disponibile in Linux, fornisce commenti e suggerimenti simili a bash.

    UnixCommandNotFound funge sia da provider di feedback che da predictor. Il suggerimento del comando command-not-found viene usato sia per fornire il feedback quando non è possibile trovare il comando in un'esecuzione interattiva e per fornire risultati intelliSense predittivi per la riga di comando successiva.

Questa funzionalità è stata aggiunta in PowerShell 7.4-preview.3.

PSLoadAssemblyFromNativeCode

Espone un'API per consentire il caricamento di assembly dal codice nativo.

PSModuleAutoLoadSkipOfflineFiles

Nota

Questa funzionalità è diventata mainstream in PowerShell 7.5-preview.5.

Con questa funzionalità abilitata, se PSModulePath di un utente contiene una cartella da un provider di servizi cloud, ad esempio OneDrive, PowerShell non attiva più il download di tutti i file contenuti in tale cartella. Tutti i file contrassegnati come non scaricati vengono ignorati. Gli utenti che usano provider di servizi cloud per sincronizzare i moduli tra i computer devono contrassegnare la cartella del modulo come Aggiunta o lo stato equivalente per provider diversi da OneDrive. Contrassegnare la cartella del modulo come Aggiunta garantisce che i file vengano sempre mantenuti su disco.

Questa funzionalità è stata aggiunta in PowerShell 7.4-preview.1.

PSRedirectToVariable

Nota

Questa funzionalità sperimentale è stata aggiunta in PowerShell 7.5-preview.4.

Se abilitata, questa funzionalità aggiunge il supporto per il reindirizzamento all'unità variabile. Questa funzionalità consente di reindirizzare i dati a una variabile usando la variable:name sintassi . PowerShell esamina la destinazione del reindirizzamento e se usa il provider di variabili che chiama Set-Variable anziché Out-File.

L'esempio seguente illustra come reindirizzare l'output di un comando a una variabile:

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

PSSubsystemPluginModel

Questa funzionalità abilita il modello di plug-in del sottosistema in PowerShell. La funzionalità consente di separare i componenti di System.Management.Automation.dll nei singoli sottosistemi che risiedono nel proprio assembly. Questa separazione riduce l'impronta sul disco del motore di PowerShell principale e consente a questi componenti di diventare funzionalità facoltative per un'installazione di PowerShell minima.

Attualmente è supportato solo il sottosistema CommandPredictor. Questo sottosistema viene usato insieme al modulo PSReadLine per fornire plug-in di stima personalizzati. In futuro, Job, CommandCompleter, Remoting e altri componenti potrebbero essere separati in assembly di sottosistemi all'esterno di System.Management.Automation.dll.

La funzionalità sperimentale include un nuovo cmdlet, Get-PSSubsystem. Questo cmdlet è disponibile solo quando la funzionalità è abilitata. Questo cmdlet restituisce informazioni sui sottosistemi disponibili nel sistema.

PSNativeWindowsTildeExpansion

Quando questa funzionalità è abilitata, PowerShell espande la tilde non racchiusa tra virgole (~) alla cartella home corrente dell'utente prima di richiamare i comandi nativi. Gli esempi seguenti illustrano il funzionamento della funzionalità.

Con la funzionalità disabilitata, la tilde viene passata al comando nativo come stringa letterale.

PS> cmd.exe /c echo ~
~

Con la funzionalità abilitata, PowerShell espande la tilde prima che venga passata al comando nativo.

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

Questa funzionalità si applica solo a Windows. Nelle piattaforme non Windows, l'espansione tilde viene gestita in modo nativo.

Questa funzionalità è stata aggiunta in PowerShell 7.5-preview.2.

PSSerializeJSONLongEnumAsNumber

Questa funzionalità consente al cmdlet ConvertTo-Json di serializzare tutti i valori di enumerazione basati su Int64/long o UInt64/ulong come valore numerico anziché la rappresentazione di stringa di tale valore enumerazione. In questo modo, il comportamento della serializzazione delle enumerazioni viene allineato ad altri tipi di base enumerazione in cui il cmdlet serializza le enumerazioni come valore numerico. Usare il parametro EnumsAsStrings per serializzare come rappresentazione di stringa.

Ad esempio:

# 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" }