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…
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.2 7.3 7,4 7.5 (Preview)
PsCommandNotFoundSuggestion Experimentální Experimentální Experimentální Experimentální
PSDesiredStateConfiguration.InvokeDscResource Experimentální Experimentální Experimentální Experimentální
PSNativePSPathResolution Experimentální Ukončené
PSSubsystemPluginModel Experimentální Experimentální Experimentální Experimentální
PSNativeCommandArgumentPassing Experimentální Hlavní fáze
PSAnsiRenderingFileInfo Experimentální Hlavní fáze
PSLoadAssemblyFromNativeCode Experimentální Experimentální Experimentální Experimentální
PSNativeCommandErrorActionPreference Experimentální Hlavní fáze
PSFeedbackProvider Experimentální Experimentální
PSModuleAutoLoadSkipOfflineFiles Experimentální Experimentální
PSCommandWithArgs Experimentální Experimentální
PSNativeWindowsTildeExpansion Experimentální

PSAnsiRenderingFileInfo

Poznámka:

Tato funkce se stala hlavní verzí PowerShellu 7.3.

Funkce formátování ANSI byly přidány v PowerShellu 7.2. Tato funkce přidá člena $PSStyle.FileInfo a povolí barvení konkrétních typů souborů.

  • $PSStyle.FileInfo.Directory - Předdefinovaný člen pro určení barvy adresářů
  • $PSStyle.FileInfo.SymbolicLink - Předdefinovaný člen pro určení barvy symbolických odkazů
  • $PSStyle.FileInfo.Executable - Předdefinovaný člen, který určuje barvu spustitelných souborů.
  • $PSStyle.FileInfo.Extension - Tento člen slouží k definování barev pro různé přípony souborů. Člen rozšíření obsahuje přípony pro archivaci a soubory PowerShellu.

Další informace najdete v tématu about_Automatic_Variables.

PsCommandNotFoundSuggestion

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

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

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.

PSNativeCommandArgumentPassing

Poznámka:

Tato funkce se stala hlavní verzí PowerShellu 7.3.

Pokud je tato experimentální funkce povolena, PowerShell používá ArgumentList vlastnost objektu StartProcessInfo místo našeho aktuálního mechanismu rekonstruování řetězce při vyvolání nativního spustitelného souboru.

Upozornění

Nové chování je zásadní změna z aktuálního chování. To může narušit skripty a automatizaci, které řeší různé problémy při vyvolání nativních aplikací. V minulosti musí být uvozovky uvozovky pro nativní aplikaci možné zadat prázdné argumenty. Pomocí tokenu stop-parsing (--%) nebo Start-Process rutiny můžete v případě potřeby zastavit předání nativního argumentu.

Tato funkce přidá novou $PSNativeCommandArgumentPassing proměnnou předvoleb, která toto chování řídí. Tato proměnná umožňuje vybrat chování za běhu. Platné hodnoty jsou Legacy, Standarda Windows. Výchozí chování je specifické pro platformu. Na platformách Windows je Windows výchozí nastavení a jiné platformy než Windows .Standard

Legacy je historické chování. Chování Windows a Standard režim jsou stejné s výjimkou Windows vyvolání následujících souborů v režimu automaticky používají Legacy předávání argumentu stylu.

  • cmd.exe
  • find.exe
  • cscript.exe
  • wscript.exe
  • sqlcmd.exe – Přidáno v PowerShellu 7.3.1
  • končící na .bat
  • končící na .cmd
  • končící na .js
  • končící na .vbs
  • končící na .wsf

Pokud je tato možnost $PSNativeCommandArgumentPassing nastavená na hodnotu Legacy nebo Standard, analyzátor tyto soubory nekontroluje.

Výchozí chování je specifické pro platformu. Na platformách Windows je Windows výchozí nastavení a jiné platformy než Windows jsou Standard.

Poznámka:

Následující příklady používají TestExe.exe nástroj. Můžete sestavovat TestExe ze zdrojového kódu. Viz TestExe ve zdrojovém úložišti PowerShellu.

Nové chování zpřístupněné touto změnou:

  • Literály nebo rozbalitelné řetězce s vloženými uvozovkami jsou zachovány:

    PS> $a = 'a" "b'
    PS> TestExe -echoargs $a 'c" "d' e" "f
    Arg 0 is <a" "b>
    Arg 1 is <c" "d>
    Arg 2 is <e f>
    
  • Prázdné řetězce jako argumenty se zachovají:

    PS> TestExe -echoargs '' a b ''
    Arg 0 is <>
    Arg 1 is <a>
    Arg 2 is <b>
    Arg 3 is <>
    

Další příklady nového chování najdete v tématu about_Parsing.

PowerShell 7.3 také přidal možnost trasovat vazbu parametrů pro nativní příkazy. Další informace naleznete v tématu Trace-Command.

PSNativeCommandErrorActionPreference

Poznámka:

Tato funkce se stala hlavní verzí PowerShellu 7.4.

Nativní příkazy obvykle vrací ukončovací kód volající aplikaci, která je nula pro úspěch nebo nenulu pro selhání. Nativní příkazy se v současné době neúčastní datového proudu chyb PowerShellu. Přesměrovaný výstup stderru není interpretován stejně jako datový proud chyb PowerShellu. Mnoho nativních příkazů používá stderr jako informační nebo podrobný stream, takže záleží jenom na ukončovacím kódu. Uživatelé, kteří pracují s nativními příkazy ve svých skriptech, musí po každém volání zkontrolovat stav ukončení podobně jako v následujícím příkladu:

if ($LASTEXITCODE -ne 0) {
    throw "Command failed. See above errors for details"
}

Tento příklad ale nepodporuje všechny případy, kdy $? může být false z rutiny nebo chyby funkce, což je $LASTEXITCODE zastaralé.

Tato funkce implementuje proměnnou $PSNativeCommandUseErrorActionPreference předvoleb, která řídí způsob zpracování chyb nativních příkazů v PowerShellu. To umožňuje nativním selháním příkazů vytvářet chybové objekty, které jsou přidány do datového proudu chyb PowerShellu, a může ukončit spouštění skriptu bez dalšího zpracování.

$PSNativeCommandUseErrorActionPreference je ve výchozím nastavení nastavená na $false hodnotu. Pokud máte nastavenou předvolbu, $true získáte následující chování:

  • Když $ErrorActionPreference = 'Stop'se skripty přeruší, když nativní příkaz vrátí nenulový ukončovací kód.
  • Když $ErrorActionPreference = 'Continue' (výchozí), zobrazí se chybové zprávy PowerShellu pro chyby nativních příkazů, ale skripty se neruší.

PSNativePSPathResolution

Poznámka:

Tato experimentální funkce byla odebrána v PowerShellu 7.3 a už se nepodporuje.

Pokud je cesta PSDrivu, která používá zprostředkovatele FileSystem, předána nativnímu příkazu, přeložená cesta k souboru se předá nativnímu příkazu. To znamená, že příkaz podobný code temp:/test.txt teď funguje podle očekávání.

Také v systému Windows platí, že pokud cesta začíná ~na , která je přeložena na úplnou cestu a předána nativnímu příkazu. V obou případech se cesta normalizuje na oddělovače adresářů pro příslušný operační systém.

  • Pokud cesta není PSDrive nebo ~ (ve Windows), nedojde k normalizaci cesty.
  • Pokud je cesta v jednoduchých uvozovkách, není vyřešená a považována za literál.

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.