about_Experimental_Features
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. Experimentele functies zijn niet bedoeld voor gebruik in productie omdat de wijzigingen mogen worden onderbroken.
Experimentele functies zijn standaard uitgeschakeld en moeten expliciet worden ingeschakeld door de gebruiker of beheerder van het systeem.
Experimentele functies worden vermeld in het powershell.config.json
bestand $PSHOME
voor alle gebruikers of het gebruikersspecifieke configuratiebestand voor een specifieke gebruiker.
Notitie
Experimentele functies die zijn ingeschakeld in het gebruikersconfiguratiebestand hebben voorrang op experimentele functies die worden vermeld in het configuratiebestand van het systeem.
Het experimentele kenmerk
Gebruik het Experimental
kenmerk om code als experimenteel te declareren.
Gebruik de volgende syntaxis om het Experimental
kenmerk te declareren met de naam van de experimentele functie en de actie die moet worden ondernomen als de experimentele functie is ingeschakeld:
[Experimental(NameOfExperimentalFeature, ExperimentAction)]
Voor modules moet de NameOfExperimentalFeature
vorm van <modulename>.<experimentname>
. De ExperimentAction
parameter moet worden opgegeven en de enige geldige waarden zijn:
Show
betekent dat deze experimentele functie moet worden weergegeven als de functie is ingeschakeldHide
betekent dat u deze experimentele functie wilt verbergen als de functie is ingeschakeld
Experimentele functies declareren in modules die zijn geschreven in C#
Auteurs van modules die de markeringen voor experimentele functies willen gebruiken, kunnen een cmdlet declareren als experimenteel met behulp van het Experimental
kenmerk.
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
Experimentele functies declareren in modules die zijn geschreven in PowerShell
Module die is geschreven in PowerShell kan ook het Experimental
kenmerk gebruiken om experimentele cmdlets te declareren:
function Enable-SSHRemoting {
[Experimental("MyRemoting.PSSSHRemoting", "Show")]
[CmdletBinding()]
param()
...
}
Metagegevens over een experimentele functie worden bewaard in het modulemanifest. Gebruik de PrivateData.PSData.ExperimentalFeatures
eigenschap van een modulemanifest om de experimentele functies van de module beschikbaar te maken. De ExperimentalFeatures
eigenschap is een matrix van hashtabellen die de naam en beschrijving van de functie bevatten.
Voorbeeld:
PrivateData = @{
PSData = @{
ExperimentalFeatures = @(
@{
Name = "PSWebCmdletV2"
Description = "Rewrite the web cmdlets for better performance"
},
@{
Name = "PSRestCmdletV2"
Description = "Rewrite the REST API cmdlets for better performance"
}
)
}
}
Wederzijds exclusief experimentele functies
Er zijn gevallen waarin een experimentele functie niet naast een bestaande functie of een andere experimentele functie kan bestaan.
U kunt bijvoorbeeld een experimentele cmdlet hebben waarmee een bestaande cmdlet wordt overschreven. De twee versies kunnen niet naast elkaar bestaan. Met de ExperimentAction.Hide
instelling kan slechts één van de twee cmdlets tegelijk worden ingeschakeld.
In dit voorbeeld maken we een nieuwe experimentele Invoke-WebRequest
cmdlet.
InvokeWebRequestCommand
bevat de niet-experimentele implementatie.
InvokeWebRequestCommandV2
bevat de experimentele versie van de cmdlet.
Met het gebruik van ExperimentAction.Hide
kan slechts één van de twee functies tegelijk worden ingeschakeld:
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Hide)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommand : WebCmdletBase { ... }
Wanneer de MyWebCmdlets.PSWebCmdletV2
experimentele functie is ingeschakeld, wordt de bestaande InvokeWebRequestCommand
implementatie verborgen en wordt de InvokeWebRequestCommandV2
implementatie van Invoke-WebRequest
.
Hierdoor kunnen gebruikers de nieuwe cmdlet uitproberen en feedback geven en zo nodig terugkeren naar de niet-experimentele versie.
Experimentele parameters in cmdlets
Het Experimental
kenmerk kan ook worden toegepast op afzonderlijke parameters. Hiermee kunt u een experimentele set parameters maken voor een bestaande cmdlet in plaats van een geheel nieuwe cmdlet.
Hier volgt een voorbeeld in C#:
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Show)]
[Parameter(ParameterSet = "NewCompilation")]
public CompilationParameters CompileParameters { ... }
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Hide)]
[Parameter()]
public CodeDom CodeDom { ... }
Hier volgt een ander voorbeeld in PowerShell-script:
param(
[Experimental("MyModule.PSNewFeature", "Show")]
[string] $NewName,
[Experimental("MyModule.PSNewFeature", "Hide")]
[string] $OldName
)
Controleren of een experimentele functie is ingeschakeld
In uw code moet u controleren of uw experimentele functie is ingeschakeld voordat u de juiste actie onderneemt. U kunt bepalen of een experimentele functie is ingeschakeld met behulp van de statische IsEnabled()
methode in de System.Management.Automation.ExperimentalFeature
klasse.
Hier volgt een voorbeeld in C#:
if (ExperimentalFeature.IsEnabled("MyModule.MyExperimentalFeature"))
{
// code specific to the experimental feature
}
Hier volgt een voorbeeld in een PowerShell-script:
if ([ExperimentalFeature]::IsEnabled("MyModule.MyExperimentalFeature"))
{
# code specific to the experimental feature
}