Experimentele functies gebruiken in PowerShell
De ondersteuning voor experimentele functies in PowerShell biedt een mechanisme voor experimentele functies die naast bestaande stabiele functies in PowerShell- of PowerShell-modules kunnen worden gebruikt.
Een experimentele functie is een functie waarbij het ontwerp niet is voltooid. De functie is beschikbaar voor gebruikers om feedback te testen en te geven. Zodra een experimentele functie is voltooid, worden de ontwerpwijzigingen belangrijke wijzigingen.
Let op
Experimentele functies zijn niet bedoeld voor gebruik in productie omdat de wijzigingen mogen worden onderbroken. Experimentele functies worden niet officieel ondersteund. We waarderen echter eventuele feedback en foutenrapporten. U kunt problemen in de GitHub-bronopslagplaats indienen.
Zie about_Experimental_Features voor meer informatie over het in- of uitschakelen van deze functies.
Levenscyclus van experimentele functies
De cmdlet Get-ExperimentalFeature retourneert alle experimentele functies die beschikbaar zijn voor PowerShell.
Experimentele functies kunnen afkomstig zijn van modules of de PowerShell-engine. Experimentele functies op basis van modules zijn alleen beschikbaar nadat u de module hebt geïmporteerd. In het volgende voorbeeld wordt psDesiredStateConfiguration niet geladen, dus de PSDesiredStateConfiguration.InvokeDscResource
functie is niet beschikbaar.
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…
Gebruik de cmdlets Enable-ExperimentalFeature en Disable-ExperimentalFeature om een functie in of uit te schakelen. U moet een nieuwe PowerShell-sessie starten om deze wijziging van kracht te laten zijn. Voer de volgende opdracht uit om de PSCommandNotFoundSuggestion
functie in te schakelen:
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
Wanneer een experimentele functie algemeen wordt, is deze niet meer beschikbaar als experimentele functie omdat de functionaliteit nu deel uitmaakt van de PowerShell-engine of -module. De PSAnsiRenderingFileInfo
functie is bijvoorbeeld mainstream geworden in PowerShell 7.3. U krijgt automatisch de functionaliteit van de functie.
Notitie
Sommige functies hebben configuratievereisten, zoals voorkeursvariabelen, die moeten worden ingesteld om de gewenste resultaten van de functie te verkrijgen.
Wanneer een experimentele functie wordt stopgezet, is deze functie niet meer beschikbaar in PowerShell. De PSNativePSPathResolution
functie is bijvoorbeeld stopgezet in PowerShell 7.3.
Beschikbare functies
In dit artikel worden de experimentele functies beschreven die beschikbaar zijn en hoe u de functie kunt gebruiken.
Legenda
- Het pictogram geeft aan dat de experimentele functie beschikbaar is in de versie van PowerShell
- Het pictogram geeft de versie van PowerShell aan waarin de experimentele functie mainstream werd
- Het pictogram geeft de versie van PowerShell aan waar de experimentele functie is verwijderd
PSAnsiRenderingFileInfo
Notitie
Deze functie werd algemeen in PowerShell 7.3.
De ANSI-opmaakfuncties zijn toegevoegd in PowerShell 7.2. Met deze functie wordt het $PSStyle.FileInfo
lid toegevoegd en wordt het kleuren van specifieke bestandstypen ingeschakeld.
$PSStyle.FileInfo.Directory
- Ingebouwd lid om de kleur voor mappen op te geven$PSStyle.FileInfo.SymbolicLink
- Ingebouwd lid om de kleur voor symbolische koppelingen op te geven$PSStyle.FileInfo.Executable
- Ingebouwd lid om de kleur voor uitvoerbare bestanden op te geven.$PSStyle.FileInfo.Extension
- Gebruik dit lid om de kleuren voor verschillende bestandsextensies te definiëren. Het extensielid bevat vooraf extensies voor archief- en PowerShell-bestanden.
Zie about_Automatic_Variables voor meer informatie.
PSCommandNotFoundSuggestion
Notitie
Deze functie werd algemeen in PowerShell 7.5-preview.5.
Raadt mogelijke opdrachten aan op basis van fuzzy overeenkomende zoekopdrachten na een 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
Notitie
Deze functie werd algemeen in PowerShell 7.5-preview.5.
Met deze functie wordt de -CommandWithArgs
parameter ingeschakeld voor pwsh
. Met deze parameter kunt u een PowerShell-opdracht uitvoeren met argumenten. In tegenstelling tot -Command
deze parameter wordt de $args
ingebouwde variabele ingevuld die door de opdracht kan worden gebruikt.
De eerste tekenreeks is de opdracht en de volgende tekenreeksen gescheiden door witruimte zijn de argumenten.
Voorbeeld:
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
arg: arg1
arg: arg2
Deze functie is toegevoegd in PowerShell 7.4-preview.2.
PSDesiredStateConfiguration.InvokeDscResource
Maakt compilatie naar MOF op niet-Windows-systemen mogelijk en maakt het gebruik van Invoke-DSCResource
zonder LCM mogelijk.
Vanaf PowerShell 7.2 is de PSDesiredStateConfiguration-module verwijderd en deze functie is standaard uitgeschakeld. Als u deze functie wilt inschakelen, moet u de PSDesiredStateConfiguration v2.0.5-module installeren vanuit de PowerShell Gallery en de functie inschakelen.
DSC v3 heeft deze experimentele functie niet. DSC v3 ondersteunt Invoke-DSCResource
alleen MOF-compilatie en biedt geen ondersteuning voor MOF-compilatie. Zie PowerShell Desired State Configuration v3 voor meer informatie.
PSFeedbackProvider
Wanneer u deze functie inschakelt, gebruikt PowerShell een nieuwe feedbackprovider om u feedback te geven wanneer een opdracht niet kan worden gevonden. De feedbackprovider is uitbreidbaar en kan worden geïmplementeerd door modules van derden. De feedbackprovider kan worden gebruikt door andere subsystemen, zoals het predictorsubsysteem, om voorspellende IntelliSense-resultaten te bieden.
Deze functie bevat twee ingebouwde feedbackproviders:
GeneralCommandErrorFeedback biedt dezelfde suggestiefunctionaliteit die momenteel bestaat
UnixCommandNotFound, beschikbaar op Linux, biedt feedback die vergelijkbaar is met bash.
UnixCommandNotFound fungeert als zowel een feedbackprovider als een predictor. De suggestie van de opdracht die niet is gevonden, wordt gebruikt voor het geven van feedback wanneer de opdracht niet kan worden gevonden in een interactieve uitvoering en voor het bieden van voorspellende IntelliSense-resultaten voor de volgende opdrachtregel.
Deze functie is toegevoegd in PowerShell 7.4-preview.3.
PSLoadAssemblyFromNativeCode
Hiermee wordt een API beschikbaar gesteld om het laden van assembly's vanuit systeemeigen code toe te staan.
PSModuleAutoLoadSkipOfflineFiles
Notitie
Deze functie werd algemeen in PowerShell 7.5-preview.5.
Als deze functie is ingeschakeld, wordt het downloaden van alle bestanden in die map niet meer geactiveerd als het PSModulePath van een gebruiker een map van een cloudprovider bevat, zoals OneDrive. Elk bestand dat is gemarkeerd als niet gedownload, wordt overgeslagen. Gebruikers die cloudproviders gebruiken om hun modules tussen computers te synchroniseren, moeten de modulemap markeren als Vastgemaakt of de equivalente status voor andere providers dan OneDrive. Als u de modulemap markeert als Vastgemaakt , zorgt u ervoor dat de bestanden altijd op schijf worden bewaard.
Deze functie is toegevoegd in PowerShell 7.4-preview.1.
PSNativeCommandArgumentPassing
Notitie
Deze functie werd algemeen in PowerShell 7.3.
Wanneer deze experimentele functie is ingeschakeld, gebruikt PowerShell de ArgumentList
eigenschap van het StartProcessInfo
object in plaats van ons huidige mechanisme voor het reconstrueren van een tekenreeks bij het aanroepen van een systeemeigen uitvoerbaar bestand.
Let op
Het nieuwe gedrag is een belangrijke wijziging van het huidige gedrag. Hierdoor kunnen scripts en automatisering worden verbroken die de verschillende problemen omzeilen bij het aanroepen van systeemeigen toepassingen. In het verleden moeten aanhalingstekens worden ontsnapt en is het niet mogelijk om lege argumenten op te geven voor een systeemeigen toepassing.
Gebruik het stop-parsing-token (--%
) of de Start-Process
cmdlet om systeemeigen argumenten door te geven wanneer dat nodig is.
Met deze functie wordt een nieuwe $PSNativeCommandArgumentPassing
voorkeursvariabele toegevoegd waarmee dit gedrag wordt bepaald. Met deze variabele kunt u het gedrag tijdens runtime selecteren. De geldige waarden zijn Legacy
, Standard
en Windows
. Het standaardgedrag is platformspecifiek. Op Windows-platforms is de standaardinstelling en Windows
niet-Windows-platformen standaard ingesteld op Standard
.
Legacy
is het historische gedrag. Het gedrag van Windows
en Standard
de modus zijn hetzelfde, behalve in Windows
de modus, aanroepen van de volgende bestanden gebruiken automatisch het Legacy
stijlargument doorgeven.
cmd.exe
find.exe
cscript.exe
wscript.exe
sqlcmd.exe
- Toegevoegd in PowerShell 7.3.1- eindigend op
.bat
- eindigend op
.cmd
- eindigend op
.js
- eindigend op
.vbs
- eindigend op
.wsf
Als de $PSNativeCommandArgumentPassing
optie is ingesteld op ofStandard
Legacy
, controleert de parser niet op deze bestanden.
Het standaardgedrag is platformspecifiek. Op Windows-platforms is de standaardinstelling en Windows
niet-Windows-platforms.Standard
Notitie
In de volgende voorbeelden wordt het TestExe.exe
hulpprogramma gebruikt. U kunt bouwen TestExe
vanuit de broncode.
Zie TestExe in de PowerShell-bronopslagplaats.
Nieuw gedrag dat beschikbaar wordt gesteld door deze wijziging:
Letterlijke of uitbreidbare tekenreeksen met ingesloten aanhalingstekens blijven behouden:
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>
Lege tekenreeksen als argumenten blijven behouden:
PS> TestExe -echoargs '' a b '' Arg 0 is <> Arg 1 is <a> Arg 2 is <b> Arg 3 is <>
Zie about_Parsing voor meer voorbeelden van het nieuwe gedrag.
PowerShell 7.3 heeft ook de mogelijkheid toegevoegd om parameterbinding te traceren voor systeemeigen opdrachten. Zie Trace-Command voor meer informatie.
PSNativeCommandErrorActionPreference
Notitie
Deze functie werd algemeen in PowerShell 7.4.
Systeemeigen opdrachten retourneren meestal een afsluitcode naar de aanroepende toepassing die nul is voor succes of niet nul voor fouten. Systeemeigen opdrachten nemen momenteel echter niet deel aan de PowerShell-foutstroom. Omgeleide stderr-uitvoer wordt niet hetzelfde geïnterpreteerd als de PowerShell-foutstroom. Veel systeemeigen opdrachten gebruiken stderr als informatie of uitgebreide stroom, dus alleen de afsluitcode is belangrijk. Gebruikers die met systeemeigen opdrachten in hun scripts werken, moeten de afsluitstatus controleren na elke aanroep die vergelijkbaar is met het volgende voorbeeld:
if ($LASTEXITCODE -ne 0) {
throw "Command failed. See above errors for details"
}
In dit voorbeeld worden echter niet alle gevallen ondersteund waarbij $?
onwaar kan zijn van een cmdlet of functiefout, waardoor deze verouderd is $LASTEXITCODE
.
Met deze functie wordt de $PSNativeCommandUseErrorActionPreference
voorkeursvariabele geïmplementeerd die bepaalt hoe systeemeigen opdrachtenfouten worden verwerkt in PowerShell. Hierdoor kunnen systeemeigen opdrachtfouten foutobjecten produceren die worden toegevoegd aan de PowerShell-foutstroom en kunnen de uitvoering van het script worden beëindigd zonder extra verwerking.
$PSNativeCommandUseErrorActionPreference
is standaard ingesteld $false
op. Als de voorkeur is ingesteld op $true
het volgende gedrag:
- Wanneer
$ErrorActionPreference = 'Stop'
, worden scripts verbroken wanneer een systeemeigen opdracht een afsluitcode retourneert die niet nul is. - Wanneer
$ErrorActionPreference = 'Continue'
(de standaardinstelling) ziet u PowerShell-foutberichten voor systeemeigen opdrachtfouten, maar scripts worden niet verbroken.
PSNativePSPathResolution
Notitie
Deze experimentele functie is verwijderd in PowerShell 7.3 en wordt niet meer ondersteund.
Als een PSDrive-pad dat gebruikmaakt van de bestandssysteemprovider wordt doorgegeven aan een systeemeigen opdracht, wordt het opgeloste bestandspad doorgegeven aan de systeemeigen opdracht. Dit betekent dat een opdracht zoals code temp:/test.txt
nu werkt zoals verwacht.
Als het pad begint in ~
Windows, wordt dat omgezet in het volledige pad en doorgegeven aan de systeemeigen opdracht. In beide gevallen wordt het pad genormaliseerd naar de adreslijstscheidingstekens voor het relevante besturingssysteem.
- Als het pad geen PSDrive of
~
(in Windows) is, vindt normalisering van het pad niet plaats - Als het pad tussen enkele aanhalingstekens staat, wordt het niet omgezet en als letterlijk behandeld
PSRedirectToVariable
Notitie
Deze experimentele functie is toegevoegd in PowerShell 7.5-preview.4.
Wanneer deze functie is ingeschakeld, voegt deze functie ondersteuning toe voor het omleiden naar het variabele station. Met deze functie kunt u gegevens omleiden naar een variabele met behulp van de variable:name
syntaxis. PowerShell inspecteert het doel van de omleiding en als deze gebruikmaakt van de variabele provider die wordt aanroepen Set-Variable
in plaats Out-File
van .
In het volgende voorbeeld ziet u hoe u de uitvoer van een opdracht omleidt naar een variabele:
. {
"Output 1"
Write-Warning "Warning, Warning!"
"Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!
PSSubsystemPluginModel
Met deze functie wordt het model van de subsysteeminvoegtoepassing in PowerShell ingeschakeld. De functie maakt het mogelijk om onderdelen van System.Management.Automation.dll
afzonderlijke subsystemen te scheiden die zich in hun eigen assembly bevinden. Deze scheiding vermindert de schijfvoetafdruk van de PowerShell-kernengine en stelt deze onderdelen in staat optionele functies te worden voor een minimale PowerShell-installatie.
Op dit moment wordt alleen het CommandPredictor-subsysteem ondersteund. Dit subsysteem wordt samen met de PSReadLine-module gebruikt om aangepaste voorspellingsinvoegtoepassingen te bieden. In de toekomst kunnen Job, CommandCompleter, Remoting en andere onderdelen worden gescheiden in subsysteemassembly's buiten System.Management.Automation.dll
.
De experimentele functie bevat een nieuwe cmdlet, Get-PSSubsystem. Deze cmdlet is alleen beschikbaar wanneer de functie is ingeschakeld. Deze cmdlet retourneert informatie over de subsystemen die beschikbaar zijn op het systeem.
PSNativeWindowsTildeExpansion
Wanneer deze functie is ingeschakeld, breidt PowerShell ongequoteerde tilde (~
) uit naar de huidige basismap van de gebruiker voordat systeemeigen opdrachten worden aanroepen. In de volgende voorbeelden ziet u hoe de functie werkt.
Als de functie is uitgeschakeld, wordt de tilde als een letterlijke tekenreeks doorgegeven aan de systeemeigen opdracht.
PS> cmd.exe /c echo ~
~
Als de functie is ingeschakeld, wordt de tilde uitgebreid voordat deze wordt doorgegeven aan de systeemeigen opdracht.
PS> cmd.exe /c echo ~
C:\Users\username
Deze functie is alleen van toepassing op Windows. Op niet-Windows-platforms wordt tilde-uitbreiding systeemeigen afgehandeld.
Deze functie is toegevoegd in PowerShell 7.5-preview.2.
PSSerializeJSONLongEnumAsNumber
Met deze functie kan de cmdlet ConvertTo-Json alle enumwaarden serialiseren op Int64/long
basis van of UInt64/ulong
als een numerieke waarde in plaats van de tekenreeksweergave van die enumwaarde. Hiermee wordt het gedrag van enumserialisatie uitgelijnd met andere enumbasistypen waarbij de cmdlet opsommingen serialiseert als hun numerieke waarde. Gebruik de parameter EnumsAsStrings om te serialiseren als de tekenreeksweergave.
Voorbeeld:
# 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" }