Sdílet prostřednictvím


Použití experimentálních funkcí v PowerShellu

Podpora experimentálních funkcí v PowerShellu poskytuje mechanismus pro experimentální funkce, které spolu existují se stávajícími stabilními funkcemi v modulech PowerShellu nebo PowerShellu.

Experimentální funkce je jedna, kde návrh není finalizován. Tato funkce je dostupná pro uživatele, kteří můžou testovat a poskytovat zpětnou vazbu. Po dokončení experimentální funkce se změny návrhu stanou zásadními změnami.

Upozornění

Experimentální funkce nejsou určeny k použití v produkčním prostředí, protože změny mohou být zásadní. Experimentální funkce nejsou oficiálně podporované. Vážíme si ale všech připomínek a zpráv o chybách. Problémy můžete za souborovat ve zdrojovém úložišti GitHubu.

Další informace o povolení nebo zakázání těchto funkcí najdete v tématu about_Experimental_Features.

Životní cyklus experimentálních funkcí

Rutina Get-ExperimentalFeature vrátí všechny experimentální funkce dostupné pro PowerShell. Experimentální funkce můžou pocházet z modulů nebo modulu PowerShellu. Experimentální funkce založené na modulech jsou dostupné až po importu modulu. V následujícím příkladu není načtena funkce PSDesiredStateConfiguration , takže PSDesiredStateConfiguration.InvokeDscResource funkce není k dispozici.

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…

K povolení nebo zakázání funkce použijte rutiny Enable-ExperimentalFeature a Disable-ExperimentalFeature. Aby se tato změna projevila, musíte spustit novou relaci PowerShellu. Spuštěním následujícího příkazu funkci povolte PSCommandNotFoundSuggestion :

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

Když se experimentální funkce stane hlavní verzí, už není k dispozici jako experimentální funkce, protože funkce je teď součástí modulu nebo modulu PowerShellu. Tato funkce se například PSAnsiRenderingFileInfo stala hlavní součástí PowerShellu 7.3. Funkce funkce získáte automaticky.

Poznámka:

Některé funkce mají požadavky na konfiguraci, například proměnné předvoleb, které musí být nastavené, aby se z funkce získaly požadované výsledky.

Pokud je experimentální funkce ukončena, tato funkce už není dostupná v PowerShellu. Například funkce PSNativePSPathResolution byla ukončena v PowerShellu 7.3.

Dostupné funkce

Tento článek popisuje experimentální funkce, které jsou k dispozici a jak tuto funkci používat.

Legenda:

  • Ikona Experimentální označuje, že experimentální funkce je dostupná ve verzi PowerShellu.
  • Ikona Hlavní fáze označuje verzi PowerShellu, kde se experimentální funkce stala hlavní verzí.
  • Ikona Ukončené označuje verzi PowerShellu, ve které byla experimentální funkce odebrána.
Název 7,4 7.5 7.6 (náhled)
PsCommandNotFoundSuggestion Experimentální Hlavní fáze Hlavní fáze
PSDesiredStateConfiguration.InvokeDscResource Experimentální Experimentální Experimentální
PSSubsystemPluginModel Experimentální Experimentální Experimentální
PSLoadAssemblyFromNativeCode Experimentální Experimentální Experimentální
PSFeedbackProvider Experimentální Experimentální Experimentální
PSModuleAutoLoadSkipOfflineFiles Experimentální Hlavní fáze Hlavní fáze
PSCommandWithArgs Experimentální Hlavní fáze Hlavní fáze
PSNativeWindowsTildeExpansion Experimentální Experimentální
PSRedirectToVariable Experimentální Experimentální
PSSerializeJSONLongEnumAsNumber Experimentální Experimentální

PsCommandNotFoundSuggestion

Poznámka:

Tato funkce se stala hlavní verzí PowerShellu 7.5-preview.5.

Doporučí potenciální příkazy založené na přibližné shodě hledání po 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

Poznámka:

Tato funkce se stala hlavní verzí PowerShellu 7.5-preview.5.

Tato funkce povolí -CommandWithArgs parametr pro pwsh. Tento parametr umožňuje spustit příkaz PowerShellu s argumenty. Na rozdíl od -Commandtohoto parametru $args naplní předdefinovaná proměnná, kterou může příkaz použít.

Prvním řetězcem je příkaz a následující řetězce oddělené prázdnými znaky jsou argumenty.

Příklad:

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

Tento příklad vytvoří následující výstup:

arg: arg1
arg: arg2

Tato funkce byla přidána v PowerShellu 7.4-preview.2.

PSDesiredStateConfiguration.InvokeDscResource

Umožňuje kompilaci moF v systémech mimo Windows a umožňuje použití Invoke-DSCResource bez LCM.

Od PowerShellu 7.2 se odebral modul PSDesiredStateConfiguration a tato funkce je ve výchozím nastavení zakázaná. Chcete-li tuto funkci povolit, je nutné nainstalovat modul PSDesiredStateConfiguration v2.0.5 z Galerie prostředí PowerShell a povolit tuto funkci.

DSC v3 nemá tuto experimentální funkci. DSC v3 podporuje Invoke-DSCResource pouze kompilaci MOF a nepodporuje ji. Další informace najdete v tématu PowerShell Desired State Configuration v3.

PSFeedbackProvider

Když tuto funkci povolíte, PowerShell použije nového poskytovatele zpětné vazby, aby vám poskytl zpětnou vazbu, když se příkaz nenajde. Poskytovatel zpětné vazby je rozšiřitelný a je možné ho implementovat moduly třetích stran. Poskytovatel zpětné vazby může být používán jinými subsystémy, jako je například subsystém prediktoru, k poskytování prediktivních výsledků IntelliSense.

Tato funkce zahrnuje dva integrované poskytovatele zpětné vazby:

  • GeneralCommandErrorFeedback dnes obsluhuje stejné funkce návrhu.

  • UnixCommandNotFound, který je k dispozici v Linuxu, poskytuje zpětnou vazbu podobnou Bash.

    UnixCommandNotFound slouží jako poskytovatel zpětné vazby i prediktor. Návrh z příkazu command-not-found slouží k poskytování zpětné vazby, když se příkaz nenašel v interaktivním spuštění, a k poskytování prediktivních výsledků IntelliSense pro další příkazový řádek.

Tato funkce byla přidána v PowerShellu 7.4-preview.3.

PSLoadAssemblyFromNativeCode

Zveřejňuje rozhraní API, které umožňuje načítání sestavení z nativního kódu.

PSModuleAutoLoadSkipOfflineFiles

Poznámka:

Tato funkce se stala hlavní verzí PowerShellu 7.5-preview.5.

Pokud funkce PSModulePath uživatele obsahuje složku od poskytovatele cloudu, jako je OneDrive, PowerShell už neaktivuje stahování všech souborů obsažených v této složce. Všechny soubory označené jako nestáhnou se přeskočí. Uživatelé, kteří používají poskytovatele cloudu k synchronizaci modulů mezi počítači, by měli složku modulu označit jako připnutou nebo ekvivalentní stav pro jiné poskytovatele než OneDrive. Označení složky modulu jako připnuté zajistí, že se soubory budou vždy uchovávat na disku.

Tato funkce byla přidána v PowerShellu 7.4-preview.1.

PSRedirectToVariable

Poznámka:

Tato experimentální funkce byla přidána v PowerShellu 7.5-preview.4.

Pokud je tato funkce povolená, přidá podporu pro přesměrování na proměnnou jednotku. Tato funkce umožňuje přesměrovat data do proměnné pomocí variable:name syntaxe. PowerShell zkontroluje cíl přesměrování a pokud používá zprostředkovatele proměnných, který Set-Variablemísto toho volá Out-File .

Následující příklad ukazuje, jak přesměrovat výstup příkazu na proměnnou:

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

PSSubsystemPluginModel

Tato funkce umožňuje v PowerShellu model modulu plug-in subsystému. Tato funkce umožňuje oddělit komponenty System.Management.Automation.dll do jednotlivých subsystémů, které se nacházejí ve vlastním sestavení. Toto oddělení snižuje nároky na disky základního modulu PowerShellu a umožňuje, aby se tyto komponenty staly volitelnými funkcemi pro minimální instalaci PowerShellu.

V současné době se podporuje pouze subsystém CommandPredictor . Tento subsystém se používá spolu s modulem PSReadLine k poskytování vlastních modulů plug-in pro predikce. V budoucnu může být úloha, commandCompleter, vzdálené komunikace a další komponenty odděleny do sestavení subsystému System.Management.Automation.dllmimo .

Experimentální funkce obsahuje novou rutinu Get-PSSubsystem. Tato rutina je dostupná jenom v případě, že je tato funkce povolená. Tato rutina vrací informace o subsystémech dostupných v systému.

PSNativeWindowsTildeExpansion

Pokud je tato funkce povolená, PowerShell před vyvoláním nativních příkazů rozbalí necitovanou vlnovku (~) do aktuální domovské složky uživatele. Následující příklady ukazují, jak tato funkce funguje.

Když je funkce zakázaná, tilda se předá nativnímu příkazu jako řetězec literálu.

PS> cmd.exe /c echo ~
~

Když je tato funkce povolená, PowerShell před předáním nativnímu příkazu rozbalí tilda.

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

Tato funkce platí jenom pro Windows. Na jiných platformách než Windows se rozšíření vlnovek zpracovává nativně.

Tato funkce byla přidána v PowerShellu 7.5-preview.2.

PSSerializeJSONLongEnumAsNumber

Tato funkce umožňuje rutině ConvertTo-Json serializovat všechny hodnoty výčtu založené nebo Int64/longUInt64/ulong jako číselnou hodnotu místo řetězcové reprezentace této hodnoty výčtu. Tím se zarovná chování serializace výčtu s jinými základními typy výčtu, kde rutina serializuje výčty jako jejich číselnou hodnotu. K serializaci jako řetězcové reprezentace použijte parametr EnumsAsStrings.

Příklad:

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