Dela via


Använda experimentella funktioner i PowerShell

Stöd för experimentella funktioner i PowerShell ger en mekanism för experimentella funktioner som kan samexistera med befintliga stabila funktioner i PowerShell- eller PowerShell-moduler.

En experimentell funktion är en funktion där designen inte har slutförts. Funktionen är tillgänglig för användare att testa och ge feedback. När en experimentell funktion har slutförts blir designändringarna icke-bakåtkompatibla.

Varning

Experimentella funktioner är inte avsedda att användas i produktion eftersom ändringarna tillåts brytas. Experimentella funktioner stöds inte officiellt. Vi uppskattar dock all feedback och buggrapporter. Du kan skapa filproblem på GitHub-källlagringsplatsen.

Mer information om hur du aktiverar eller inaktiverar dessa funktioner finns i about_Experimental_Features.

Livscykel för experimentell funktion

Cmdleten Get-ExperimentalFeature returnerar alla experimentella funktioner som är tillgängliga för PowerShell. Experimentella funktioner kan komma från moduler eller PowerShell-motorn. Modulbaserade experimentella funktioner är endast tillgängliga när du har importerat modulen. I följande exempel läses inte PSDesiredStateConfiguration in, så funktionen PSDesiredStateConfiguration.InvokeDscResource är inte tillgänglig.

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…

Använd cmdletarna Enable-ExperimentalFeature och Disable-ExperimentalFeature för att aktivera eller inaktivera en funktion. Du måste starta en ny PowerShell-session för att den här ändringen ska gälla. Kör följande kommando för att aktivera PSCommandNotFoundSuggestion funktionen:

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

När en experimentell funktion blir mainstream är den inte längre tillgänglig som en experimentell funktion eftersom funktionen nu är en del av PowerShell-motorn eller -modulen. Funktionen blev till exempel PSAnsiRenderingFileInfo mainstream i PowerShell 7.3. Du får funktionens funktioner automatiskt.

Kommentar

Vissa funktioner har konfigurationskrav, till exempel inställningsvariabler, som måste anges för att få önskat resultat från funktionen.

När en experimentell funktion upphör är den funktionen inte längre tillgänglig i PowerShell. Funktionen avbröts till exempel PSNativePSPathResolution i PowerShell 7.3.

Tillgängliga funktioner

Den här artikeln beskriver de experimentella funktioner som är tillgängliga och hur du använder funktionen.

Förklaring

  • Ikonen Experimentell anger att den experimentella funktionen är tillgänglig i versionen av PowerShell
  • Ikonen Huvudström anger vilken version av PowerShell där den experimentella funktionen blev mainstream
  • Ikonen Utgången anger den version av PowerShell där den experimentella funktionen togs bort
Name 7,4 7.5 7.6 (förhandsversion)
PSCommandNotFoundSuggestion Experimentell Huvudström Huvudström
PSDesiredStateConfiguration.InvokeDscResource Experimentell Experimentell Experimentell
PSSubsystemPluginModel Experimentell Experimentell Experimentell
PSLoadAssemblyFromNativeCode Experimentell Experimentell Experimentell
PSFeedbackProvider Experimentell Experimentell Experimentell
PSModuleAutoLoadSkipOfflineFiles Experimentell Huvudström Huvudström
PSCommandWithArgs Experimentell Huvudström Huvudström
PSNativeWindowsTildeExpansion Experimentell Experimentell
PSRedirectToVariable Experimentell Experimentell
PSSerializeJSONLongEnumAsNumber Experimentell Experimentell

PSCommandNotFoundSuggestion

Kommentar

Den här funktionen blev mainstream i PowerShell 7.5-preview.5.

Rekommenderar potentiella kommandon baserat på fuzzy matchande sökning efter en 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

Kommentar

Den här funktionen blev mainstream i PowerShell 7.5-preview.5.

Den här funktionen aktiverar parametern -CommandWithArgs för pwsh. Med den här parametern kan du köra ett PowerShell-kommando med argument. Till skillnad från -Commandfyller den här parametern i den $args inbyggda variabeln som kan användas av kommandot.

Den första strängen är kommandot och efterföljande strängar avgränsade med blanksteg är argumenten.

Till exempel:

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

Det här exemplet genererar följande utdata:

arg: arg1
arg: arg2

Den här funktionen lades till i PowerShell 7.4-preview.2.

PSDesiredStateConfiguration.InvokeDscResource

Möjliggör kompilering till MOF på icke-Windows-system och möjliggör användning av Invoke-DSCResource utan en LCM.

Från och med PowerShell 7.2 togs modulen PSDesiredStateConfiguration bort och den här funktionen är inaktiverad som standard. Om du vill aktivera den här funktionen måste du installera modulen PSDesiredStateConfiguration v2.0.5 från PowerShell-galleriet och aktivera funktionen.

DSC v3 har inte den här experimentella funktionen. DSC v3 stöder Invoke-DSCResource endast och använder inte eller stöder inte MOF-kompilering. Mer information finns i PowerShell Desired State Configuration v3.

PSFeedbackProvider

När du aktiverar den här funktionen använder PowerShell en ny feedbackleverantör för att ge dig feedback när ett kommando inte kan hittas. Feedbackprovidern är utökningsbar och kan implementeras av moduler från tredje part. Feedbackprovidern kan användas av andra undersystem, till exempel prediktorundersystemet, för att ge förutsägande IntelliSense-resultat.

Den här funktionen innehåller två inbyggda feedbackleverantörer:

  • GeneralCommandErrorFeedback har samma förslagsfunktioner som finns idag

  • UnixCommandNotFound, som finns i Linux, ger feedback som liknar bash.

    UnixCommandNotFound fungerar både som feedbackprovider och prediktor. Förslaget från kommandot command-not-found används både för att ge feedback när kommandot inte kan hittas i en interaktiv körning och för att tillhandahålla förutsägande IntelliSense-resultat för nästa kommandorad.

Den här funktionen lades till i PowerShell 7.4-preview.3.

PSLoadAssemblyFromNativeCode

Exponerar ett API för att tillåta sammansättningsinläsning från inbyggd kod.

PSModuleAutoLoadSkipOfflineFiles

Kommentar

Den här funktionen blev mainstream i PowerShell 7.5-preview.5.

Med den här funktionen aktiverad, om en användares PSModulePath innehåller en mapp från en molnleverantör, till exempel OneDrive, utlöser PowerShell inte längre nedladdningen av alla filer som finns i mappen. Alla filer som har markerats som inte nedladdade hoppas över. Användare som använder molnleverantörer för att synkronisera sina moduler mellan datorer bör markera modulmappen som Fäst eller motsvarande status för andra leverantörer än OneDrive. Genom att markera modulmappen som Fäst ser du till att filerna alltid sparas på disken.

Den här funktionen lades till i PowerShell 7.4-preview.1.

PSRedirectToVariable

Kommentar

Den här experimentella funktionen lades till i PowerShell 7.5-preview.4.

När den här funktionen är aktiverad lägger den här funktionen till stöd för omdirigering till variabelenheten. Med den här funktionen kan du omdirigera data till en variabel med hjälp av syntaxen variable:name . PowerShell inspekterar omdirigeringens mål och om den använder variabelprovidern anropas Set-Variable den i stället Out-Fileför .

I följande exempel visas hur du omdirigerar utdata från ett kommando till en variabel:

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

PSSubsystemPluginModel

Den här funktionen aktiverar plugin-modellen för undersystemet i PowerShell. Funktionen gör det möjligt att separera komponenter i System.Management.Automation.dll enskilda undersystem som finns i deras egen sammansättning. Den här separationen minskar diskfotavtrycket för powershell-kärnmotorn och gör att dessa komponenter kan bli valfria funktioner för en minimal PowerShell-installation.

För närvarande stöds endast CommandPredictor-undersystemet . Det här undersystemet används tillsammans med PSReadLine-modulen för att tillhandahålla anpassade förutsägelse-plugin-program. I framtiden kan Jobb, CommandCompleter, Fjärrkommunikation och andra komponenter separeras i undersystemsammansättningar utanför System.Management.Automation.dll.

Den experimentella funktionen innehåller en ny cmdlet, Get-PSSubsystem. Den här cmdleten är endast tillgänglig när funktionen är aktiverad. Den här cmdleten returnerar information om de undersystem som är tillgängliga i systemet.

PSNativeWindowsTildeExpansion

När den här funktionen är aktiverad expanderar PowerShell oquoted tilde (~) till användarens aktuella hemmapp innan inbyggda kommandon anropas. I följande exempel visas hur funktionen fungerar.

Med funktionen inaktiverad skickas tilde till det interna kommandot som en literalsträng.

PS> cmd.exe /c echo ~
~

Med funktionen aktiverad expanderar PowerShell tilde innan den skickas till det interna kommandot.

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

Den här funktionen gäller endast för Windows. På icke-Windows-plattformar hanteras tilde-expansion internt.

Den här funktionen lades till i PowerShell 7.5-preview.2.

PSSerializeJSONLongEnumAsNumber

Med den här funktionen kan cmdleten ConvertTo-Json serialisera alla uppräkningsvärden baserat på Int64/long eller UInt64/ulong som ett numeriskt värde i stället för strängrepresentationen av det uppräkningsvärdet. Detta justerar beteendet för uppräknings serialisering med andra uppräkningsbastyper där cmdleten serialiserar uppräkningar som deras numeriska värde. Använd parametern EnumsAsStrings för att serialisera som strängrepresentation.

Till exempel:

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