Freigeben über


Verwenden experimenteller Features in PowerShell

Die Unterstützung experimenteller Features in PowerShell stellt einen Mechanismus bereit, über den experimentelle Features und vorhandene stabile Features in PowerShell oder PowerShell-Modulen parallel genutzt werden können.

Ein experimentelles Feature ist ein Feature, dessen Entwurf noch nicht finalisiert ist. Das Feature wird bereitgestellt, damit die Benutzer es testen und Feedback dazu senden können. Sobald ein experimentelles Feature finalisiert wurde, werden die Designänderungen zu Breaking Changes.

Achtung

Experimentelle Features sind nicht für den Einsatz in der Produktion vorgesehen, da Auswirkungen auf die Lauffähigkeit möglich sind. Experimentelle Features werden nicht offiziell unterstützt. Wir freuen uns jedoch über Feedback und Fehlermeldungen. Sie können Probleme im GitHub-Quellrepository melden.

Weitere Informationen zum Aktivieren oder Deaktivieren dieser Features finden Sie unter Grundlegendes zu experimentellen Features.

Lebenszyklus experimenteller Funktionen

Das Cmdlet Get-ExperimentalFeature gibt alle experimentellen Funktionen zurück, die PowerShell zur Verfügung stehen. Experimentelle Funktionen können aus Modulen oder dem PowerShell-Modul stammen. Modulbasierte experimentelle Funktionen sind erst verfügbar, nachdem Sie das Modul importiert haben. Im folgenden Beispiel wird die PSDesiredStateConfiguration nicht geladen, sodass die PSDesiredStateConfiguration.InvokeDscResource-Funktion nicht verfügbar ist.

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…

Verwenden Sie die Cmdlets Enable-ExperimentalFeature und Disable-ExperimentalFeature, um eine Funktion zu aktivieren oder zu deaktivieren. Sie müssen eine neue PowerShell-Sitzung beginnen, damit diese Änderung aktiviert wird. Führen Sie den folgenden Befehl aus, um die PSCommandNotFoundSuggestion-Funktion zu aktivieren:

Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.

Wenn eine experimentelle Funktion zur Mainstream-Funktion wird, ist sie nicht mehr als experimentelle Funktion verfügbar, da die Funktionalität jetzt Teil der PowerShell-Engine oder des Moduls ist. Beispielsweise wurde die PSAnsiRenderingFileInfo-Funktion in PowerShell 7.3 eine Mainstream-Funktion. Sie erhalten diese Funktion automatisch.

Hinweis

Einige Funktionen verfügen über Konfigurationsanforderungen, z. B. Einstellungsvariablen, die festgelegt werden müssen, um die gewünschten Ergebnisse aus der Funktion abzurufen.

Wenn eine experimentelle Funktion eingestellt wurde, ist diese Funktion in PowerShell nicht mehr verfügbar. Beispielsweise wird die PSNativePSPathResolution-Funktion in PowerShell 7.3 nicht mehr unterstützt.

Verfügbare Features

Dieser Artikel beschreibt, welche experimentellen Features verfügbar sind und wie sie verwendet werden.

Legende

  • Das Symbol Experimentell zeigt an, dass das experimentelle Feature in dieser Version von PowerShell verfügbar ist.
  • Das Symbol Mainstream zeigt die Version von PowerShell an, in der das experimentelle Feature zur Standardversion hinzugefügt wurde.
  • Das Symbol Eingestellt zeigt die Version von PowerShell an, in der das experimentelle Feature entfernt wurde.
Name 7.4 7.5 7.6 (Vorschau)
PSCommandNotFoundSuggestion Experimentell Mainstream Mainstream
PSDesiredStateConfiguration.InvokeDscResource Experimentell Experimentell Experimentell
PSSubsystemPluginModel Experimentell Experimentell Experimentell
PSLoadAssemblyFromNativeCode Experimentell Experimentell Experimentell
PSFeedbackProvider Experimentell Experimentell Experimentell
PSModuleAutoLoadSkipOfflineFiles Experimentell Mainstream Mainstream
PSCommandWithArgs Experimentell Mainstream Mainstream
PSNativeWindowsTildeExpansion Experimentell Experimentell
PSRedirectToVariable Experimentell Experimentell
PSSerializeJSONLongEnumAsNumber Experimentell Experimentell

PSCommandNotFoundSuggestion

Hinweis

Dieses Feature wird seit PowerShell 7.5.preview-5 allgemein unterstützt.

Empfiehlt potenzielle Befehle basierend auf einer Fuzzysuche nach einer 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

Hinweis

Dieses Feature wird seit PowerShell 7.5.preview-5 allgemein unterstützt.

Dieses Feature aktiviert den Parameter -CommandWithArgs für pwsh. Mit diesem Parameter können Sie einen PowerShell-Befehl mit Argumenten ausführen. Im Gegensatz zu -Command füllt dieser Parameter die integrierte $args-Variable auf, die vom Befehl verwendet werden kann.

Die erste Zeichenfolge ist der Befehl, und nachfolgende Zeichenfolgen, die durch Leerzeichen getrennt sind, sind die Argumente.

Beispiel:

pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2

Dieses Beispiel erzeugt die folgende Ausgabe:

arg: arg1
arg: arg2

Dieses Feature wurde in PowerShell 7.4-preview.2 hinzugefügt.

PSDesiredStateConfiguration.InvokeDscResource

Aktiviert die Kompilierung in MOF auf Nicht-Windows-Systemen sowie die Verwendung von Invoke-DSCResource ohne LCM.

Ab PowerShell 7.2 wurde das PSDesiredStateConfiguration-Modul entfernt, und dieses Feature ist standardmäßig deaktiviert. Um diese Funktion zu aktivieren, müssen Sie das Modul PSDesiredStateConfiguration, v2.0.5 aus dem PowerShell-Katalog installieren und die Funktion aktivieren.

DSC v3 verfügt nicht über dieses experimentelle Feature. DSC v3 unterstützt nur Invoke-DSCResource; die MOF-Kompilierung wird weder verwendet noch unterstützt. Weitere Informationen finden Sie unter PowerShell Desired State Configuration v3.

PSFeedbackProvider

Wenn Sie dieses Feature aktivieren, verwendet PowerShell einen neuen Feedbackanbieter, um Ihnen Feedback anzuzeigen, wenn ein Befehl nicht gefunden werden kann. Der Feedbackanbieter ist erweiterbar und kann von Drittanbietermodulen implementiert werden. Der Feedbackanbieter kann von anderen Subsystemen wie dem Vorhersagesubsystem verwendet werden, um vorhersagbare IntelliSense-Ergebnisse bereitzustellen.

Dieses Feature umfasst zwei integrierte Feedbackanbieter:

  • GeneralCommandErrorFeedback erfüllt die gleiche Vorschlagsfunktionalität wie heute.

  • UnixCommandNotFound ist unter Linux verfügbar und bietet Feedback ähnlich wie Bash.

    UnixCommandNotFound dient sowohl als Feedbackanbieter als auch als Prädiktor. Der Vorschlag aus dem Befehl „Command-not-found“ wird sowohl für die Bereitstellung des Feedbacks verwendet, wenn der Befehl in einer interaktiven Ausführung nicht gefunden werden kann, als auch für die Bereitstellung von vorhersagbaren IntelliSense-Ergebnissen für die nächste Befehlszeile.

Diese Funktion wurde in PowerShell 7.4-preview.3 hinzugefügt.

PSLoadAssemblyFromNativeCode

Macht eine API verfügbar, um das Laden von Assemblys aus nativem Code zuzulassen.

PSModuleAutoLoadSkipOfflineFiles

Hinweis

Dieses Feature wird seit PowerShell 7.5.preview-5 allgemein unterstützt.

Wenn dieses Feature aktiviert ist, löst PowerShell nicht mehr den Download aller in diesem Ordner enthaltenen Dateien aus, wenn der PSModulePath von Benutzer*innen einen Ordner eines Cloudanbieters wie OneDrive enthält. Alle als nicht heruntergeladen gekennzeichneten Dateien werden übersprungen. Benutzer*innen, die Cloudanbieter nutzen, um ihre Module zwischen Computern zu synchronisieren, sollten den Modulordner als angeheftet oder mit einem entsprechenden Status bei anderen Anbieter als OneDrive kennzeichnen. Wenn Sie den Modulordner als angeheftet kennzeichnen, stellen Sie sicher, dass die Dateien immer auf dem Datenträger gespeichert werden.

Diese Funktion wurde in PowerShell 7.4-preview.1 hinzugefügt.

PSRedirectToVariable

Hinweis

Diese experimentelle Funktion wurde in PowerShell 7.5-preview.4 eingeführt.

Wenn diese Funktion aktiviert ist, wird Unterstützung für die Umleitung auf das variable Laufwerk hinzugefügt. Mit diesem Feature können Sie Daten mithilfe der variable:name-Syntax an eine Variable umleiten. PowerShell prüft das Ziel der Umleitung und ruft Set-Variable anstelle von Out-File auf, wenn es den variablen Anbieter verwendet.

Das folgende Beispiel zeigt, wie die Umleitung der Ausgabe eines Befehls zu einer Variable funktioniert:

. {
    "Output 1"
    Write-Warning "Warning, Warning!"
    "Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!

PSSubsystemPluginModel

Dieses Feature aktiviert das Plug-In-Modell des Subsystems in PowerShell. Es ermöglicht das Trennen von Komponenten von System.Management.Automation.dll in einzelne Subsysteme, die sich in einer eigenen Assembly befinden. Diese Trennung reduziert den Speicherbedarf des Datenträgers der Kern-Engine von PowerShell. Zudem werden diese Komponenten zu optionalen Features für eine Minimalinstallation von PowerShell.

Derzeit wird nur das Subsystem CommandPredictor unterstützt. Dieses Subsystem wird zusammen mit dem PSReadLine-Modul zum Bereitstellen benutzerdefinierter Vorhersage-Plug-Ins verwendet. Zukünftig können Job, CommandCompleter, Remoting und andere Komponenten in Subsystemassemblys außerhalb von System.Management.Automation.dll getrennt werden.

Das experimentelle Feature enthält das neue Cmdlet Get-PSSubsystem. Dieses Cmdlet ist nur verfügbar, wenn das Feature aktiviert ist. Es gibt Informationen zu den Subsystemen zurück, die auf dem System verfügbar sind.

PSNativeWindowsTildeExpansion

Wenn diese Funktion aktiviert ist, erweitert PowerShell die Tilde ohne Anführungszeichen (~) in den aktuellen Basisordner des Benutzers, bevor native Befehle aufgerufen werden. Anhand der folgenden Beispiele wird die Funktionsweise erläutert.

Wenn die Funktion deaktiviert ist, wird die Tilde als Literalzeichenfolge an den nativen Befehl übergeben.

PS> cmd.exe /c echo ~
~

Wenn die Funktion aktiviert ist, erweitert PowerShell die Tilde, bevor sie an den nativen Befehl übergeben wird.

PS> cmd.exe /c echo ~
C:\Users\username

Diese Funktion gilt nur für Windows. Auf Nicht-Windows-Plattformen wird die Tildeerweiterung nativ verwaltet.

Diese Funktion wurde in PowerShell 7.5-preview.2 hinzugefügt.

PSSerializeJSONLongEnumAsNumber

Mit diesem Feature kann das Cmdlet ConvertTo-Json beliebige Enumerationswerte basierend auf Int64/long oder UInt64/ulong als numerischen Wert und nicht als Zeichenfolgendarstellung dieses Enumerationswerts serialisieren. Dadurch wird das Verhalten der Enumerationsserialisierung an anderen Enumerationsbasistypen ausgerichtet, bei denen das Cmdlet Enumerationen als numerischen Wert serialisiert. Verwenden Sie den Parameter EnumsAsStrings für eine Serialisierung als Zeichenfolgendarstellung.

Beispiel:

# 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" }