Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Unterstützung experimenteller Features in PowerShell bietet einen Mechanismus für experimentelle Features, die mit vorhandenen stabilen Features in PowerShell- oder PowerShell-Modulen koexistieren können.
Ein experimentelles Feature ist eine, bei der das Design nicht abgeschlossen ist. Das Feature steht Benutzern zum Testen und Bereitstellen von Feedback zur Verfügung. Sobald ein experimentelles Feature finalisiert wurde, werden die Designänderungen zu Breaking Changes. Experimentelle Features sind nicht für den Einsatz in der Produktion vorgesehen, da Auswirkungen auf die Lauffähigkeit möglich sind.
Experimentelle Features sind standardmäßig deaktiviert und müssen vom Benutzer oder Administrator des Systems explizit aktiviert werden.
Aktivierte experimentelle Features werden in der datei powershell.config.json in $PSHOME für alle Benutzer oder die benutzerspezifische Konfigurationsdatei für einen bestimmten Benutzer aufgeführt.
Anmerkung
Experimentelle Features, die in der Benutzerkonfigurationsdatei aktiviert sind, haben Vorrang vor experimentellen Features, die in der Systemkonfigurationsdatei aufgeführt sind.
Das Experimental-Attribut
Verwenden Sie das attribut Experimental, um Code als experimentell zu deklarieren.
Verwenden Sie die folgende Syntax, um das attribut Experimental zu deklarieren, das den Namen des experimentellen Features und die Auszuführende Aktion angibt, wenn das experimentelle Feature aktiviert ist:
[Experimental(NameOfExperimentalFeature, ExperimentAction)]
Für Module muss die NameOfExperimentalFeature der Form <modulename>.<experimentname>folgen. Der parameter ExperimentAction muss angegeben werden, und die einzigen gültigen Werte sind:
-
Showbedeutet, dieses experimentelle Feature anzuzeigen, wenn das Feature aktiviert ist -
Hidebedeutet, dieses experimentelle Feature auszublenden, wenn das Feature aktiviert ist
Deklarieren experimenteller Features in Modulen, die in C geschrieben wurden#
Modulautoren, die die Flags "Experimentelles Feature" verwenden möchten, können ein Cmdlet mithilfe des attributs Experimental als experimentell deklarieren.
[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }
Deklarieren experimenteller Features in Modulen, die in PowerShell geschrieben wurden
In PowerShell geschriebenes Modul kann auch das attribut Experimental verwenden, um experimentelle Cmdlets zu deklarieren:
function Enable-SSHRemoting {
[Experimental("MyRemoting.PSSSHRemoting", "Show")]
[CmdletBinding()]
param()
...
}
Metadaten zu einem experimentellen Feature werden im Modulmanifest gespeichert. Verwenden Sie die PrivateData.PSData.ExperimentalFeatures Eigenschaft eines Modulmanifests, um die experimentellen Features aus dem Modul verfügbar zu machen. Die ExperimentalFeatures-Eigenschaft ist ein Array von Hashtables, die den Namen und die Beschreibung des Features enthalten.
Zum Beispiel:
PrivateData = @{
PSData = @{
ExperimentalFeatures = @(
@{
Name = "PSWebCmdletV2"
Description = "Rewrite the web cmdlets for better performance"
},
@{
Name = "PSRestCmdletV2"
Description = "Rewrite the REST API cmdlets for better performance"
}
)
}
}
Sich gegenseitig ausschließende experimentelle Features
Es gibt Fälle, in denen ein experimentelles Feature nicht parallel zu einem vorhandenen Feature oder einem anderen experimentellen Feature vorhanden sein kann.
Beispielsweise können Sie über ein experimentelles Cmdlet verfügen, das ein vorhandenes Cmdlet außer Kraft setzt. Die beiden Versionen können nicht nebeneinander vorhanden sein. Mit der Einstellung ExperimentAction.Hide können nur eines der beiden Cmdlets gleichzeitig aktiviert werden.
In diesem Beispiel erstellen wir ein neues experimentelles Invoke-WebRequest Cmdlet.
InvokeWebRequestCommand enthält die nicht experimentelle Implementierung.
InvokeWebRequestCommandV2 enthält die experimentelle Version des Cmdlets.
Durch die Verwendung von ExperimentAction.Hide können nur eine der beiden Features gleichzeitig aktiviert werden:
[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 { ... }
Wenn das MyWebCmdlets.PSWebCmdletV2 experimentelle Feature aktiviert ist, wird die vorhandene InvokeWebRequestCommand Implementierung ausgeblendet, und die InvokeWebRequestCommandV2 stellt die Implementierung von Invoke-WebRequestbereit.
Auf diese Weise können Benutzer das neue cmdlet ausprobieren und Feedback geben, um dann bei Bedarf zur nicht experimentellen Version zurückzukehren.
Experimentelle Parameter in Cmdlets
Das attribut Experimental kann auch auf einzelne Parameter angewendet werden. Auf diese Weise können Sie einen experimentellen Satz von Parametern für ein vorhandenes Cmdlet anstelle eines völlig neuen Cmdlets erstellen.
Hier ist ein Beispiel in C#:
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Show)]
[Parameter(ParameterSet = "NewCompilation")]
public CompilationParameters CompileParameters { ... }
[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Hide)]
[Parameter()]
public CodeDom CodeDom { ... }
Hier ist ein anderes Beispiel in PowerShell-Skript:
param(
[Experimental("MyModule.PSNewFeature", "Show")]
[string] $NewName,
[Experimental("MyModule.PSNewFeature", "Hide")]
[string] $OldName
)
Überprüfen, ob ein experimentelles Feature aktiviert ist
In Ihrem Code müssen Sie überprüfen, ob Ihr experimentelles Feature aktiviert ist, bevor Sie entsprechende Maßnahmen ergreifen. Mithilfe der statischen IsEnabled() Methode für die System.Management.Automation.ExperimentalFeature-Klasse können Sie ermitteln, ob ein experimentelles Feature aktiviert ist.
Hier ist ein Beispiel in C#:
if (ExperimentalFeature.IsEnabled("MyModule.MyExperimentalFeature"))
{
// code specific to the experimental feature
}
Hier ist ein Beispiel für ein PowerShell-Skript:
if ([ExperimentalFeature]::IsEnabled("MyModule.MyExperimentalFeature"))
{
# code specific to the experimental feature
}