Udostępnij za pośrednictwem


Korzystanie z funkcji eksperymentalnych w programie PowerShell

Obsługa funkcji eksperymentalnych w programie PowerShell zapewnia mechanizm, który pozwala funkcjom eksperymentalnym współistnieć z istniejącymi stabilnymi funkcjami w programie PowerShell lub jego modułach.

Funkcja eksperymentalna jest funkcją, w której projekt nie jest sfinalizowany. Funkcja jest dostępna dla użytkowników do testowania i przekazywania opinii. Gdy funkcja eksperymentalna zostanie sfinalizowana, zmiany projektu staną się zmianami niekompatybilnymi.

Uwaga

Funkcje eksperymentalne nie są przeznaczone do użycia w środowisku produkcyjnym, ponieważ zmiany mogą powodować przerwy w działaniu. Funkcje eksperymentalne nie są oficjalnie obsługiwane. Doceniamy jednak wszelkie opinie i raporty o błędach. Problemy można zgłosić w repozytorium źródłowym usługi GitHub.

Aby uzyskać więcej informacji na temat włączania lub wyłączania tych funkcji, zobacz about_Experimental_Features.

Cykl życia funkcji eksperymentalnych

Polecenie cmdlet Get-ExperimentalFeature zwraca wszystkie funkcje eksperymentalne dostępne dla programu PowerShell. Funkcje eksperymentalne mogą pochodzić z modułów lub silnika PowerShell. Funkcje eksperymentalne oparte na module są dostępne tylko po zaimportowaniu modułu. W poniższym przykładzie PSDesiredStateConfiguration nie jest załadowany, więc PSDesiredStateConfiguration.InvokeDscResource tej funkcji nie można użyć.

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…

Użyj poleceń cmdlet Enable-ExperimentalFeature i Disable-ExperimentalFeature, aby włączyć lub wyłączyć funkcję. Aby ta zmiana obowiązywała, należy uruchomić nową sesję programu PowerShell. Uruchom następujące polecenie, aby włączyć PSCommandNotFoundSuggestion tę funkcję:

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

Gdy cecha eksperymentalna stanie się standardową, nie jest już dostępna jako funkcja eksperymentalna, ponieważ funkcjonalność jest teraz częścią silnika lub modułu programu PowerShell. Na przykład funkcja PSAnsiRenderingFileInfo stała się standardem w programie PowerShell 7.3. Funkcjonalność tej funkcji jest dostępna automatycznie.

Uwaga

Niektóre funkcje mają wymagania dotyczące konfiguracji, takie jak zmienne preferencji, które należy ustawić, aby uzyskać żądane wyniki z funkcji.

Kiedy funkcja eksperymentalna zostaje wycofana, nie jest już dostępna w programie PowerShell. Na przykład PSNativePSPathResolution funkcja została przerwana w programie PowerShell 7.3.

Dostępne funkcje

W tym artykule opisano dostępne funkcje eksperymentalne i sposób korzystania z tej funkcji.

Legenda

  • Ikona Eksperymentalne wskazuje, że funkcja eksperymentalna jest dostępna w wersji programu PowerShell
  • Ikona Główna wskazuje wersję programu PowerShell, w której funkcjonalność eksperymentalna weszła do głównego nurtu.
  • Ikona Wycofano wskazuje wersję programu PowerShell, w której usunięto funkcję eksperymentalną
Nazwisko 7,4 7.5 7.6 (wersja zapoznawcza)
PSCommandNotFoundSuggestion Eksperymentalny Główny nurt Główny nurt
PSDesiredStateConfiguration.InvokeDscResource Eksperymentalny Eksperymentalne Eksperymentalne
PSSubsystemPluginModel Eksperymentalne Eksperymentalne Eksperymentalny
PSLoadAssemblyFromNativeCode Eksperymentalne Eksperymentalny Eksperymentalne
PSFeedbackProvider Eksperymentalne Eksperymentalne Eksperymentalne
PSModuleAutoLoadSkipOfflineFiles Eksperymentalny Główny nurt Główna tendencja
PSCommandWithArgs Eksperymentalny Główny nurt Główny nurt
PSNativeWindowsTildeExpansion Eksperymentalne Eksperymentalny
PSRedirectToVariable Eksperymentalny Eksperymentalne
PSSerializeJSONLongEnumAsNumber Eksperymentalny Eksperymentalny

PSCommandNotFoundSuggestion

Uwaga

Ta funkcja stała się głównym nurtem w programie PowerShell 7.5-preview.5.

Zaleca potencjalne polecenia na podstawie rozmytego dopasowania wyszukiwania po wystąpieniu 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

Uwaga

Ta funkcja stała się głównym nurtem w programie PowerShell 7.5-preview.5.

Funkcja ta umożliwia parametr -CommandWithArgs dla elementu pwsh. Ten parametr umożliwia wykonanie polecenia programu PowerShell z argumentami. W przeciwieństwie do -Command ten parametr wypełnia wbudowaną zmienną $args, która może być używana przez polecenie.

Pierwszy ciąg to polecenie, a kolejne ciągi rozdzielane białym znakiem są argumentami.

Na przykład:

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

Ten przykład generuje następujące wyniki:

arg: arg1
arg: arg2

Ta funkcja została dodana w programie PowerShell 7.4-preview.2.

PSDesiredStateConfiguration.InvokeDscResource

Umożliwia kompilację do MOF na systemach innych niż Windows i umożliwia korzystanie z Invoke-DSCResource bez LCM.

Począwszy od programu PowerShell 7.2, moduł PSDesiredStateConfiguration został usunięty i ta funkcja jest domyślnie wyłączona. Aby włączyć tę funkcję, należy zainstalować moduł PSDesiredStateConfiguration v2.0.5 z Galeria programu PowerShell i włączyć tę funkcję.

DSC w wersji 3 nie ma tej funkcji eksperymentalnej. DSC w wersji 3 obsługuje tylko Invoke-DSCResource i nie używa ani nie obsługuje kompilacji MOF. Aby uzyskać więcej informacji, zobacz PowerShell Desired State Configuration v3.

PSFeedbackProvider

Po włączeniu tej funkcji program PowerShell używa nowego dostawcy opinii, aby przekazać opinię, gdy nie można odnaleźć polecenia. Dostawca opinii jest rozszerzalny i może być implementowany przez moduły innych firm. Dostawca opinii może być używany przez inne podsystemy, takie jak podsystem predykcyjny, w celu zapewnienia predykcyjnych wyników funkcji IntelliSense.

Ta funkcja obejmuje dwóch wbudowanych dostawców opinii:

  • Funkcja GeneralCommandErrorFeedback obsługuje te same funkcje sugestii, które już dzisiaj istnieją

  • Polecenie UnixCommandNotFound, dostępne w systemie Linux, daje informację zwrotną podobną do powłoki Bash.

    UnixCommandNotFound służy zarówno jako dostawca opinii, jak i prognostyk. Sugestia polecenia command-not-found jest używana zarówno do informowania, gdy polecenie nie zostało znalezione w interaktywnym uruchomieniu, jak i do wyświetlania predykcyjnych wyników IntelliSense dla kolejnego polecenia.

Ta funkcja została dodana w programie PowerShell 7.4-preview.3.

PSLoadAssemblyFromNativeCode

Udostępnia interfejs API, aby umożliwić ładowanie bibliotek z kodu natywnego.

PSModuleAutoLoadSkipOfflineFiles

Uwaga

Ta funkcja stała się głównym nurtem w programie PowerShell 7.5-preview.5.

Po włączeniu tej funkcji, jeśli ścieżka użytkownika PSModulePath zawiera folder od dostawcy usług chmurowych, takiego jak OneDrive, program PowerShell nie wymusza pobierania wszystkich plików zawartych w tym folderze. Pominięto wszystkie pliki oznaczone jako nie pobrane. Użytkownicy, którzy używają dostawców usług w chmurze do synchronizowania swoich modułów między maszynami, powinni oznaczyć folder modułu jako Przypięty lub równoważny stan dostawców innych niż OneDrive. Oznaczanie folderu modułu jako Przypięte gwarantuje, że pliki są zawsze przechowywane na dysku.

Ta funkcja została dodana w programie PowerShell 7.4-preview.1.

PS PrzekierujDoZmiennej

Uwaga

Ta funkcja eksperymentalna została dodana w programie PowerShell 7.5-preview.4.

Po włączeniu ta funkcja dodaje obsługę przekierowywania do dysku o nazwie Zmienna:. Ta funkcja umożliwia przekierowywanie danych do zmiennej Variable:name przy użyciu składni. PowerShell sprawdza miejsce docelowe przekierowania i, jeśli używa dostawcy zmiennej, wywołuje Set-Variable, zamiast Out-File.

W poniższym przykładzie pokazano, jak przekierować dane wyjściowe polecenia do zmiennej:

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

PSSubsystemPluginModel

Ta funkcja umożliwia model wtyczki podsystemu w programie PowerShell. Funkcja umożliwia oddzielenie składników System.Management.Automation.dll na poszczególne podsystemy, które znajdują się w swoich własnych zestawach. Ta separacja zmniejsza zajętość dysku przez silnik PowerShell i umożliwia, aby te składniki stały się funkcjami opcjonalnymi w przypadku minimalnej instalacji programu PowerShell.

Obecnie obsługiwany jest tylko podsystem CommandPredictor . Ten podsystem jest używany wraz z modułem PSReadLine do dostarczania niestandardowych wtyczek predykcji. W przyszłości Job, CommandCompleter, Remoting i inne składniki mogą być rozdzielone do zestawów podsystemów poza System.Management.Automation.dll.

Funkcja eksperymentalna zawiera nowe polecenie cmdlet Get-PSSubsystem. To polecenie cmdlet jest dostępne tylko wtedy, gdy funkcja jest włączona. To polecenie cmdlet zwraca informacje o podsystemach, które są dostępne w systemie.

PSNativeWindowsTildeExpansion

Po włączeniu tej funkcji program PowerShell rozszerza niekwotowaną tyldę (~) do bieżącego folderu macierzystego użytkownika przed wywołaniem poleceń natywnych. W poniższych przykładach pokazano, jak działa funkcja.

Po wyłączeniu opcji, tilde jest przekazywana do natywnego polecenia jako dosłowny ciąg znaków.

PS> cmd.exe /c echo ~
~

Po włączeniu tej funkcji program PowerShell rozszerza tyldę przed przekazaniem jej do natywnego polecenia.

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

Ta funkcja dotyczy tylko systemu Windows. Na platformach innych niż Windows rozszerzenie tyldy jest obsługiwane natywnie.

Ta funkcja została dodana w programie PowerShell 7.5-preview.2.

PSSerializeJSONLongEnumAsNumber

Ta funkcja umożliwia polecenie cmdlet ConvertTo-Json serializację dowolnych wartości wyliczenia na podstawie Int64/long lub UInt64/ulong jako wartości liczbowej, a nie ciągu reprezentującego tę wartość wyliczeniową. To wyrównuje zachowanie serializacji typów wyliczeniowych z innymi podstawowymi typami wyliczeń, w których polecenie cmdlet serializuje wyliczenia jako ich wartość liczbową. Użyj parametru EnumsAsStrings , aby serializować jako reprezentację ciągu.

Na przykład:

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