Kísérleti funkciók használata a PowerShellben
A PowerShell kísérleti funkcióinak támogatása olyan mechanizmust biztosít, amely lehetővé teszi, hogy a kísérleti funkciók együtt létezhessenek a PowerShell vagy a PowerShell-modulok meglévő stabil funkcióival.
A kísérleti funkció az, ahol a terv nem véglegesítve van. A funkció a felhasználók számára elérhető, hogy teszteljék és visszajelzést adjanak. A kísérleti funkciók véglegesítése után a tervezési módosítások kompatibilitástörő változásokká válnak.
Figyelemfelhívás
A kísérleti funkciók nem használhatók éles környezetben, mivel a módosítások kompatibilitástörőek lehetnek. A kísérleti funkciók hivatalosan nem támogatottak. Nagyra értékeljük azonban a visszajelzéseket és a hibajelentéseket. A GitHub-forrásadattárban fájlozhatja a problémákat.
A funkciók engedélyezéséről vagy letiltásáról további információt a about_Experimental_Features talál.
Kísérleti funkciók életciklusa
A Get-ExperimentalFeature parancsmag a PowerShellben elérhető összes kísérleti funkciót visszaadja.
A kísérleti funkciók modulokból vagy a PowerShell-motorból származhatnak. A modulalapú kísérleti funkciók csak a modul importálása után érhetők el. Az alábbi példában a PSDesiredStateConfiguration nincs betöltve, így a PSDesiredStateConfiguration.InvokeDscResource
funkció nem érhető el.
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…
A funkció engedélyezéséhez vagy letiltásához használja az Enable-ExperimentalFeature és a Disable-ExperimentalFeature parancsmagokat. A módosítás érvénybe lépéséhez új PowerShell-munkamenetet kell indítania. Futtassa a következő parancsot a PSCommandNotFoundSuggestion
funkció engedélyezéséhez:
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
Amikor egy kísérleti funkció általánossá válik, az már nem érhető el kísérleti funkcióként, mivel a funkció most már a PowerShell-motor vagy -modul része. A funkció például általánossá vált a PSAnsiRenderingFileInfo
PowerShell 7.3-ban. A funkció funkcióit automatikusan megkapja.
Feljegyzés
Egyes funkciók konfigurációs követelményekkel( például beállításváltozókkal) rendelkeznek, amelyeket be kell állítani, hogy megkapják a kívánt eredményeket a szolgáltatásból.
Ha egy kísérleti funkció megszűnik, ez a funkció már nem érhető el a PowerShellben. A funkciót például megszüntették a PSNativePSPathResolution
PowerShell 7.3-ban.
Elérhető funkciók
Ez a cikk az elérhető kísérleti funkciókat és a funkció használatát ismerteti.
Jelmagyarázat
- Az ikon azt jelzi, hogy a kísérleti funkció elérhető a PowerShell verziójában
- Az ikon a PowerShell azon verzióját jelzi, ahol a kísérleti funkció általánossá vált
- Az ikon a PowerShell azon verzióját jelzi, ahol a kísérleti funkció el lett távolítva
PSAnsiRenderingFileInfo
Feljegyzés
Ez a funkció általánossá vált a PowerShell 7.3-ban.
Az ANSI formázási funkciói a PowerShell 7.2-ben lettek hozzáadva. Ez a funkció hozzáadja a $PSStyle.FileInfo
tagot, és lehetővé teszi bizonyos fájltípusok színezését.
$PSStyle.FileInfo.Directory
– Beépített tag a könyvtárak színének megadásához$PSStyle.FileInfo.SymbolicLink
– Beépített tag a szimbolikus hivatkozások színének megadásához$PSStyle.FileInfo.Executable
- Beépített tag a végrehajtható elemek színének megadásához.$PSStyle.FileInfo.Extension
– Ez a tag határozza meg a különböző fájlkiterjesztések színeit. A bővítménytag előre tartalmazza az archív és PowerShell-fájlok bővítményeit.
További információ: about_Automatic_Variables.
PSCommandNotFoundSuggestion
Feljegyzés
Ez a funkció általánossá vált a PowerShell 7.5-preview.5-ben.
A CommandNotFoundException utáni homályos keresés alapján javasolja a lehetséges parancsokat.
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
Feljegyzés
Ez a funkció általánossá vált a PowerShell 7.5-preview.5-ben.
Ez a funkció engedélyezi a paramétert a -CommandWithArgs
következőhöz pwsh
: . Ez a paraméter lehetővé teszi a PowerShell-parancsok argumentumokkal való végrehajtását. Ezzel ellentétben -Command
ez a paraméter feltölti a $args
parancs által használható beépített változót.
Az első sztring a parancs, a további szóközök által tagolt sztringek pedig az argumentumok.
Példa:
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
Ez a példa a következő kimenetet hozza létre:
arg: arg1
arg: arg2
Ez a funkció a PowerShell 7.4-preview.2-ben lett hozzáadva.
PSDesiredStateConfiguration.InvokeDscResource
Lehetővé teszi az MOF-ra való fordítást nem Windows rendszerű rendszereken, és lehetővé teszi az LCM nélküli használatot Invoke-DSCResource
.
A PowerShell 7.2-től kezdve a PSDesiredStateConfiguration modul el lett távolítva, és ez a funkció alapértelmezés szerint le van tiltva. A szolgáltatás engedélyezéséhez telepítenie kell a PSDesiredStateConfiguration v2.0.5 modult a PowerShell-galéria, és engedélyeznie kell a funkciót.
A DSC v3 nem rendelkezik ezzel a kísérleti funkcióval. A DSC v3 csak az MOF-fordítást támogatja Invoke-DSCResource
és nem támogatja. További információ: PowerShell Desired State Configuration v3.
PSFeedbackProvider
Ha engedélyezi ezt a funkciót, a PowerShell egy új visszajelzési szolgáltatóval küld visszajelzést, ha egy parancs nem található. A visszajelzési szolgáltató bővíthető, és külső modulok is implementálhatók. A visszajelzési szolgáltatót más alrendszerek, például a prediktor alrendszer is használhatják a prediktív IntelliSense-eredmények biztosításához.
Ez a funkció két beépített visszajelzési szolgáltatót tartalmaz:
A GeneralCommandErrorFeedback ugyanazt a javaslati funkciót szolgálja ki, amely ma is létezik
A Linuxon elérhető UnixCommandNotFound a bashhez hasonló visszajelzést nyújt.
A UnixCommandNotFound visszajelzési szolgáltatóként és prediktorként is szolgál. A command-not-found parancs javaslatát egyaránt arra használja a rendszer, hogy visszajelzést küldjön, ha a parancs nem található interaktív futtatásban, és prediktív IntelliSense-eredményeket biztosít a következő parancssorhoz.
Ez a funkció a PowerShell 7.4-preview.3-ban lett hozzáadva.
PSLoadAssemblyFromNativeCode
Egy API-t tesz elérhetővé, amely lehetővé teszi a szerelvény betöltését a natív kódból.
PSModuleAutoLoadSkipOfflineFiles
Feljegyzés
Ez a funkció általánossá vált a PowerShell 7.5-preview.5-ben.
Ha ez a funkció engedélyezve van, ha egy felhasználó PSModulePath-kiszolgálója tartalmaz egy felhőszolgáltatótól származó mappát, például a OneDrive-ot, a PowerShell többé nem aktiválja az adott mappában található összes fájl letöltését. A program kihagyja a nem letöltöttként megjelölt fájlokat. Azok a felhasználók, akik felhőszolgáltatókkal szinkronizálják a modulokat a gépek között, a modulmappát rögzítettként vagy a OneDrive-on kívüli szolgáltatók számára egyenértékű állapotként kell megjelölniük. A modulmappa rögzítettként való megjelölésével biztosítható, hogy a fájlok mindig a lemezen legyenek tárolva.
Ez a funkció a PowerShell 7.4-preview.1-ben lett hozzáadva.
PSNativeCommandArgumentPassing
Feljegyzés
Ez a funkció általánossá vált a PowerShell 7.3-ban.
Ha ez a kísérleti funkció engedélyezve van, a PowerShell az ArgumentList
objektum tulajdonságát használja ahelyett StartProcessInfo
, hogy egy natív végrehajtható fájl meghívásakor a sztring rekonstruálásának jelenlegi mechanizmusát használjuk.
Figyelemfelhívás
Az új viselkedés az aktuális viselkedéshez való kompatibilitástörő változás . Ez megszakíthatja a szkripteket és az automatizálást, amelyek a natív alkalmazások meghívása során felmerülő különböző problémákat megkerülik. Az idézőjeleket előzményként meg kell szökni, és nem lehet üres argumentumokat adni egy natív alkalmazásnak.
A stop-parsing token (--%
) vagy a parancsmag használatával szükség esetén megkerülheti a Start-Process
natív argumentumokat.
Ez a funkció egy új $PSNativeCommandArgumentPassing
beállítási változót ad hozzá, amely vezérli ezt a viselkedést. Ez a változó lehetővé teszi, hogy futásidőben válassza ki a viselkedést. Az érvényes értékek a következők Legacy
: , Standard
és Windows
. Az alapértelmezett viselkedés platformspecifikus. Windows-platformokon az alapértelmezett beállítás, Windows
a nem Windows-platformok pedig alapértelmezés szerint a Standard
.
Legacy
a történelmi viselkedés. A viselkedés Windows
és Standard
a mód ugyanaz, kivéve, Windows
ha a következő fájlok meghívásai automatikusan használják az Legacy
átadott stílusargumentumot.
cmd.exe
find.exe
cscript.exe
wscript.exe
sqlcmd.exe
– Hozzáadva a PowerShell 7.3.1-ben- végződés:
.bat
- végződés:
.cmd
- végződés:
.js
- végződés:
.vbs
- végződés:
.wsf
Ha az $PSNativeCommandArgumentPassing
érték vagy Legacy
Standard
a beállítás, az elemző nem ellenőrzi ezeket a fájlokat.
Az alapértelmezett viselkedés platformspecifikus. Windows-platformokon az alapértelmezett beállítás, Windows
a nem Windows-platformok pedig a Standard
.
Feljegyzés
Az alábbi példák az TestExe.exe
eszközt használják. A forráskódból építhet TestExe
.
Lásd: TestExe a PowerShell-forrásadattárban.
A módosítás által elérhetővé tett új viselkedések:
Az idézőjeleket tartalmazó literális vagy bővíthető sztringek megmaradnak:
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>
Az argumentumként üres sztringek megmaradnak:
PS> TestExe -echoargs '' a b '' Arg 0 is <> Arg 1 is <a> Arg 2 is <b> Arg 3 is <>
További példák az új viselkedésre: about_Parsing.
A PowerShell 7.3 emellett lehetővé tette a natív parancsok paraméterkötésének nyomon követését is. További információ: Trace-Command.
PSNativeCommandErrorActionPreference
Feljegyzés
Ez a funkció általánossá vált a PowerShell 7.4-ben.
A natív parancsok általában olyan kilépési kódot adnak vissza a hívó alkalmazásnak, amely a sikeresség vagy a sikertelenség szempontjából nulla. A natív parancsok azonban jelenleg nem vesznek részt a PowerShell-hibastreamben. Az irányított stderr-kimenet nem ugyanúgy értelmezve, mint a PowerShell-hibastream. Sok natív parancs használja az stderrt információként vagy részletes adatfolyamként, így csak a kilépési kód számít. A szkriptekben natív parancsokkal dolgozó felhasználóknak minden hívás után ellenőrizniük kell a kilépés állapotát az alábbi példához hasonlóan:
if ($LASTEXITCODE -ne 0) {
throw "Command failed. See above errors for details"
}
Ez a példa azonban nem támogatja azokat az eseteket, amikor $?
egy parancsmagból vagy függvényhibából hamis lehet, így elavulttá válik $LASTEXITCODE
.
Ez a funkció implementálja a $PSNativeCommandUseErrorActionPreference
beállítási változót, amely szabályozza a natív parancsok hibáinak kezelését a PowerShellben. Ez lehetővé teszi, hogy a natív parancshibák olyan hibaobjektumokat generáljanak, amelyek hozzáadódnak a PowerShell-hibastreamhez, és további kezelés nélkül leállíthatják a szkript végrehajtását.
$PSNativeCommandUseErrorActionPreference
alapértelmezés szerint be $false
van állítva. A beállítás beállításával $true
a következő viselkedést kapja:
- Amikor
$ErrorActionPreference = 'Stop'
a szkriptek megszakadnak, amikor egy natív parancs nem nulla kilépési kódot ad vissza. - Amikor
$ErrorActionPreference = 'Continue'
(az alapértelmezett) a natív parancshibákkal kapcsolatos PowerShell-hibaüzenetek jelennek meg, a szkriptek azonban nem fognak megszakadni.
PSNativePSPathResolution
Feljegyzés
Ez a kísérleti funkció el lett távolítva a PowerShell 7.3-ban, és már nem támogatott.
Ha a Fájlrendszer-szolgáltatót használó PSDrive-elérési út egy natív parancsnak lesz átadva, a feloldott fájl elérési útja a natív parancsnak lesz átadva. Ez azt jelenti, hogy a parancs a várt módon code temp:/test.txt
működik.
Windows rendszeren, ha az elérési út a következővel ~
kezdődik, az a teljes elérési útra lesz feloldva, és a natív parancsnak lesz átadva. Mindkét esetben a rendszer normalizálja az elérési utat a megfelelő operációs rendszer címtárelválasztóihoz.
- Ha az elérési út nem PSDrive vagy
~
(Windows rendszeren), akkor az elérési út normalizálása nem történik meg - Ha az elérési út egy idézőjelben van, akkor az nem lesz feloldva és konstansként kezelve
PSRedirectToVariable
Feljegyzés
Ez a kísérleti funkció a PowerShell 7.5-preview.4-ben lett hozzáadva.
Ha engedélyezve van, ez a funkció támogatja a változó meghajtóra való átirányítást. Ez a funkció lehetővé teszi az adatok egy változóba való átirányítását a variable:name
szintaxis használatával. A PowerShell az átirányítás célját veszi figyelembe, és ha az általa hívott Set-Variable
változószolgáltatót használja.Out-File
Az alábbi példa bemutatja, hogyan irányíthatja át egy parancs kimenetét egy változóra:
. {
"Output 1"
Write-Warning "Warning, Warning!"
"Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!
PSSubsystemPluginModel
Ez a funkció lehetővé teszi az alrendszer beépülő modul modelljét a PowerShellben. A funkció lehetővé teszi az egyes alrendszerek összetevőinek elkülönítését System.Management.Automation.dll
a saját szerelvényükben. Ez az elkülönítés csökkenti az alapvető PowerShell-motor lemezigényét, és lehetővé teszi, hogy ezek az összetevők választható funkciókká váljanak a Minimális PowerShell-telepítéshez.
Jelenleg csak a CommandPredictor alrendszer támogatott. Ezt az alrendszert a PSReadLine modullal együtt használjuk egyéni előrejelzési beépülő modulok biztosítására. A jövőben a Feladat, a CommandCompleter, az Újramoting és más összetevők különválaszthatók a kívül eső System.Management.Automation.dll
alrendszer-szerelvényekre.
A kísérleti funkció tartalmaz egy új parancsmagot, a Get-PSSubsystem-t. Ez a parancsmag csak akkor érhető el, ha a funkció engedélyezve van. Ez a parancsmag a rendszeren elérhető alrendszerekről ad vissza információkat.
PSNativeWindowsTildeExpansion
Ha ez a funkció engedélyezve van, a PowerShell a natív parancsok meghívása előtt kibontja a nemquoted tilde (~
) fájlt a felhasználó aktuális kezdőlapmappájába. Az alábbi példák a funkció működését mutatják be.
Ha a funkció le van tiltva, a tilde szó szerinti sztringként lesz átadva a natív parancsnak.
PS> cmd.exe /c echo ~
~
Ha a funkció engedélyezve van, a PowerShell kiterjeszti a tilde-t, mielőtt a natív parancsnak átadják.
PS> cmd.exe /c echo ~
C:\Users\username
Ez a funkció csak a Windowsra vonatkozik. A nem Windows-platformokon a tilde-bővítés natív módon történik.
Ez a funkció a PowerShell 7.5-preview.2-ben lett hozzáadva.
PSSerializeJSONLongEnumAsNumber
Ez a funkció lehetővé teszi, hogy a ConvertTo-Json parancsmag numerikus érték alapján Int64/long
vagy UInt64/ulong
számként szerializálja az enumerálási értékeket a számérték sztringjének megjelenítése helyett. Ez az enumerálás viselkedését más enum-alaptípusokhoz igazítja, ahol a parancsmag numerikus értékként szerializálja az enumerálást. Sztringábrázolásként az EnumsAsStrings paraméterrel szerializálhatja.
Példa:
# 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" }