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
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.
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 UInt64/ulong
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" }