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 označuje, že experimentální funkce je dostupná ve verzi PowerShellu.
- Ikona označuje verzi PowerShellu, kde se experimentální funkce stala hlavní verzí.
- Ikona označuje verzi PowerShellu, ve které byla experimentální funkce odebrána.
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
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 -Command
tohoto 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.
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
, Standard
a 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.
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ý Out-File
místo toho volá Set-Variable
.
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.dll
mimo .
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/long
UInt64/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" }