Share via


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…
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 Experimenteel pictogram geeft aan dat de experimentele functie beschikbaar is in de versie van PowerShell
  • Het Mainstream pictogram geeft de versie van PowerShell aan waarin de experimentele functie mainstream werd
  • Het Buiten gebruik pictogram geeft de versie van PowerShell aan waar de experimentele functie is verwijderd
Naam 7.2 7.3 7.4 7.5 (preview)
PSCommandNotFoundSuggestion Experimenteel Experimenteel Experimenteel Experimenteel
PSDesiredStateConfiguration.InvokeDscResource Experimenteel Experimenteel Experimenteel Experimenteel
PSNativePSPathResolution Experimenteel Buiten gebruik
PSSubsystemPluginModel Experimenteel Experimenteel Experimenteel Experimenteel
PSNativeCommandArgumentPassing Experimenteel Mainstream
PSAnsiRenderingFileInfo Experimenteel Mainstream
PSLoadAssemblyFromNativeCode Experimenteel Experimenteel Experimenteel Experimenteel
PSNativeCommandErrorActionPreference Experimenteel Mainstream
PSFeedbackProvider Experimenteel Experimenteel
PSModuleAutoLoadSkipOfflineFiles Experimenteel Experimenteel
PSCommandWithArgs Experimenteel Experimenteel
PSNativeWindowsTildeExpansion Experimenteel

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

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

Met deze functie wordt de -CommandWithArgs parameter ingeschakeld voor pwsh. Met deze parameter kunt u een PowerShell-opdracht uitvoeren met argumenten. In tegenstelling tot -Commanddeze 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

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, Standarden 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 ofStandardLegacy, 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

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.