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
indica che la funzionalità sperimentale è disponibile nella versione di PowerShell
- L'icona
indica la versione di PowerShell in cui la funzionalità sperimentale è diventata mainstream
- L'icona
indica la versione di PowerShell in cui è stata rimossa la funzionalità 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" }