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…
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 anger att den experimentella funktionen är tillgänglig i versionen av PowerShell
- Ikonen anger vilken version av PowerShell där den experimentella funktionen blev mainstream
- Ikonen anger den version av PowerShell där den experimentella funktionen togs bort
PSAnsiRenderingFileInfo
Kommentar
Den här funktionen blev mainstream i PowerShell 7.3.
ANSI-formateringsfunktionerna har lagts till i PowerShell 7.2. Den här funktionen lägger till $PSStyle.FileInfo
medlemmen och aktiverar färgning av specifika filtyper.
$PSStyle.FileInfo.Directory
– Inbyggd medlem för att ange färg för kataloger$PSStyle.FileInfo.SymbolicLink
– Inbyggd medlem för att ange färg för symboliska länkar$PSStyle.FileInfo.Executable
– Inbyggd medlem för att ange färgen för körbara filer.$PSStyle.FileInfo.Extension
– Använd den här medlemmen för att definiera färgerna för olika filnamnstillägg. Tilläggsmedlemmen innehåller tillägg för arkiv- och PowerShell-filer.
Mer information finns i about_Automatic_Variables.
PSCommandNotFoundSuggestion
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
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 -Command
fyller 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
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.
PSNativeCommandArgumentPassing
Kommentar
Den här funktionen blev mainstream i PowerShell 7.3.
När den här experimentella funktionen är aktiverad använder ArgumentList
PowerShell -egenskapen StartProcessInfo
för objektet i stället för vår nuvarande mekanism för att rekonstruera en sträng när du anropar en intern körbar fil.
Varning
Det nya beteendet är en icke-bakåtkompatibel ändring från det aktuella beteendet. Detta kan bryta skript och automatisering som kringgår de olika problemen när inbyggda program anropas. Tidigare måste citattecken vara undantagna och det går inte att ange tomma argument till ett internt program.
Använd stop-parsing-token (--%
) eller cmdleten Start-Process
för att kringgå interna argument som skickas vid behov.
Den här funktionen lägger till en ny $PSNativeCommandArgumentPassing
inställningsvariabel som styr det här beteendet. Med den här variabeln kan du välja beteende vid körning. Giltiga värden är Legacy
, Standard
och Windows
. Standardbeteendet är plattformsspecifikt. På Windows-plattformar är Windows
standardinställningen och icke-Windows-plattformar standardvärdet Standard
.
Legacy
är det historiska beteendet. Beteendet Windows
för och Standard
läget är detsamma förutom att Windows
anrop av följande filer i läge automatiskt använder formatargumentet Legacy
som skickas.
cmd.exe
find.exe
cscript.exe
wscript.exe
sqlcmd.exe
– Har lagts till i PowerShell 7.3.1- slutar med
.bat
- slutar med
.cmd
- slutar med
.js
- slutar med
.vbs
- slutar med
.wsf
$PSNativeCommandArgumentPassing
Om är inställt på antingen Legacy
eller Standard
, söker parsern inte efter dessa filer.
Standardbeteendet är plattformsspecifikt. På Windows-plattformar är Windows
standardinställningen och icke-Windows-plattformar är Standard
.
Kommentar
I följande exempel används TestExe.exe
verktyget. Du kan skapa TestExe
från källkoden.
Se TestExe på PowerShell-källlagringsplatsen.
Nya beteenden som görs tillgängliga genom den här ändringen:
Literala eller expanderbara strängar med inbäddade citattecken bevaras:
PS> $a = 'a" "b' PS> TestExe -echoargs $a 'c" "d' e" "f Arg 0 is <a" "b> Arg 1 is <c" "d> Arg 2 is <e f>
Tomma strängar som argument bevaras:
PS> TestExe -echoargs '' a b '' Arg 0 is <> Arg 1 is <a> Arg 2 is <b> Arg 3 is <>
Fler exempel på det nya beteendet finns i about_Parsing.
PowerShell 7.3 har också lagt till möjligheten att spåra parameterbindning för interna kommandon. Mer information finns i Trace-Command.
PSNativeCommandErrorActionPreference
Kommentar
Den här funktionen blev mainstream i PowerShell 7.4.
Interna kommandon returnerar vanligtvis en slutkod till det anropande programmet som är noll för lyckat eller icke-noll för fel. Interna kommandon deltar dock för närvarande inte i PowerShell-felströmmen. Omdirigerade stderr-utdata tolkas inte på samma sätt som PowerShell-felströmmen. Många interna kommandon använder stderr som en informationsström eller utförlig ström, och därför är det bara slutkoden som är viktig. Användare som arbetar med interna kommandon i sina skript måste kontrollera avslutsstatusen efter varje anrop med följande exempel:
if ($LASTEXITCODE -ne 0) {
throw "Command failed. See above errors for details"
}
Det här exemplet stöder dock inte alla fall där $?
kan vara false från en cmdlet eller ett funktionsfel, vilket gör $LASTEXITCODE
inaktuellt.
Den här funktionen implementerar inställningsvariabeln $PSNativeCommandUseErrorActionPreference
som styr hur interna kommandofel hanteras i PowerShell. Detta gör att interna kommandofel kan generera felobjekt som läggs till i PowerShell-felströmmen och kan avsluta körningen av skriptet utan extra hantering.
$PSNativeCommandUseErrorActionPreference
är inställt $false
på som standard. Med inställningen inställd på $true
får du följande beteende:
- När
$ErrorActionPreference = 'Stop'
bryts skripten när ett internt kommando returnerar en slutkod som inte är noll. - När
$ErrorActionPreference = 'Continue'
(standardinställningen) visas PowerShell-felmeddelanden för interna kommandofel, men skripten bryts inte.
PSNativePSPathResolution
Kommentar
Den här experimentella funktionen har tagits bort i PowerShell 7.3 och stöds inte längre.
Om en PSDrive-sökväg som använder FileSystem-providern skickas till ett internt kommando skickas den lösta filsökvägen till det interna kommandot. Det innebär att ett kommando som code temp:/test.txt
nu fungerar som förväntat.
I Windows, om sökvägen börjar med ~
, matchas den till den fullständiga sökvägen och skickas till det interna kommandot. I båda fallen normaliseras sökvägen till katalogavgränsarna för det relevanta operativsystemet.
- Om sökvägen inte är en PSDrive eller
~
(i Windows) sker inte sökvägsnormalisering - Om sökvägen finns inom enkla citattecken löses den inte och behandlas som literal
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.