Använda experimentella funktioner i PowerShell
Stöd för experimentella funktioner i PowerShell är 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.
Tillgängliga funktioner
I den här artikeln beskrivs 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
anger vilken version av PowerShell där den experimentella funktionen blev mainstream
- Ikonen
anger vilken version av PowerShell där den experimentella funktionen togs bort
Name | 7.2 | 7.3 | 7,4 |
---|---|---|---|
PSCommandNotFoundSuggestion | |||
PSDesiredStateConfiguration.InvokeDscResource (DSC v2) | |||
PSNativePSPathResolution | |||
PSSubsystemPluginModel | |||
PSNativeCommandArgumentPassing | |||
PSAnsiRenderingFileInfo | |||
PSLoadAssemblyFromNativeCode | |||
PSNativeCommandErrorActionPreference | |||
PSCustomTableHeaderLabelDecoration | |||
PSFeedbackProvider | |||
PSModuleAutoLoadSkipOfflineFiles | |||
PSCommandWithArgs |
PSAMSIMethodInvocationLogging
Anteckning
Det här experimentet lades till i PowerShell 7.3.
Mer information om AMSI finns i Så här hjälper AMSI.
PSAnsiRenderingFileInfo
Anteckning
Den här funktionen blev mainstream i PowerShell 7.3.
Det här experimentet lades 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ärg för körbara filer.$PSStyle.FileInfo.Extension
– Använd den här medlemmen för att definiera färger för olika filnamnstillägg. Tilläggsmedlemmen innehåller tillägg för arkiv- och PowerShell-filer.
Mer information finns i about_Automatic_Variables.
Anteckning
Den här funktionen är beroende av funktionen PSAnsiRendering som nu är en standardfunktion.
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.
Exempel:
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
Det här exemplet genererar följande utdata:
arg: arg1
arg: arg2
Den här funktionen har lagts till i PowerShell 7.4-preview.2.
PSCustomTableHeaderLabelDecoration
När den här funktionen är aktiverad inkluderar $PSStyle
formateringsdi differentiering för tabellrubriketiketter som inte är egenskapsmedlemmar. Standardutdata från Get-Process
innehåller till exempel följande kolumner: NPM(K)
, PM(M)
, WS(M)
och CPU(s)
.
Get-Process pwsh
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
99 84.57 170.50 5.89 48688 1 pwsh
73 87.75 133.08 3.09 49120 1 pwsh
98 70.31 158.56 4.23 91220 1 pwsh
125 70.19 171.33 4.84 92124 1 pwsh
Dessa kolumnnamn matchar inte några egenskaper för objektet System.Diagnostics.Process som returneras av cmdleten. Det här är värden som beräknas av PowerShell-formateringssystemet.
Med den här funktionen aktiverad visas dessa kolumnrubriker i kursiv stil för att skilja dessa kolumnnamn från egenskapsnamn.
PSDesiredStateConfiguration.InvokeDscResource
Möjliggör kompilering till MOF på icke-Windows-system och möjliggör användning av Invoke-DSCResource
utan en LCM.
I tidigare förhandsversioner av PowerShell 7.2 var den här funktionen aktiverad som standard. 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 med .Enable-ExperimentalFeature
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
Ersätt det hårdkodade förslagsramverket med den utökningsbara feedbackprovidern.
PSLoadAssemblyFromNativeCode
Exponerar ett API för att tillåta sammansättningsinläsning från intern 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 den mappen. Alla filer som har markerats som ej 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. Om du markerar modulmappen som Fäst ser du till att filerna alltid sparas på disken.
PSNativeCommandArgumentPassing
Anteckning
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 vid anrop av interna program. Tidigare måste citattecken vara undantagna och det går inte att ange tomma argument till ett internt program.
Använd stoppparsningstoken (--%
) 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
och Standard
läget är desamma, förutom att anrop av följande filer automatiskt använder formatargumentet Legacy
som skickas i Windows
läge.
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
Om är inställt på $PSNativeCommandArgumentPassing
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
.
Anteckning
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:
Strängliteraler 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
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, vilket innebär att endast slutkoden är viktig. Användare som arbetar med interna kommandon i sina skript måste kontrollera avslutsstatusen efter varje anrop med hjälp av 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 falska 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.
Om du vill aktivera den här funktionen kör du följande kommandon:
Enable-ExperimentalFeature PSNativeCommandErrorActionPreference
Du måste starta en ny PowerShell-session för att ändringen ska gälla. Från och med PowerShell 7.4 $PSNativeCommandUseErrorActionPreference
är inställt på $true
som standard. Med inställningen inställd $true
på får du följande beteende:
- När
$ErrorActionPreference = 'Stop'
bryts skript 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 avbryts inte.
PSNativePSPathResolution
Anteckning
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 matchade 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 inbyggda 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 är inom enkla citattecken matchas den inte och behandlas som literal
PSSubsystemPluginModel
Den här funktionen aktiverar undersystemets plugin-modell i PowerShell. Funktionen gör det möjligt att separera komponenter System.Management.Automation.dll
i i 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ägelseplugin-program. I framtiden kan Job, CommandCompleter, Remoting och andra komponenter separeras i undersystemssammansättningar utanför System.Management.Automation.dll
.
Den experimentella funktionen innehåller en ny cmdlet, Get-PSSubsystem. Den här cmdleten är bara tillgänglig när funktionen är aktiverad. Den här cmdleten returnerar information om de delsystem som är tillgängliga i systemet.