Megosztás a következőn keresztül:


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 Kísérleti ikon azt jelzi, hogy a kísérleti funkció elérhető a PowerShell verziójában
  • Az Mainstream ikon a PowerShell azon verzióját jelzi, ahol a kísérleti funkció általánossá vált
  • Az Megszűnt ikon a PowerShell azon verzióját jelzi, ahol a kísérleti funkció el lett távolítva
Név 7.2 7,4 7.5 (előzetes verzió)
PSCommandNotFoundSuggestion Kísérleti Kísérleti Mainstream
PSDesiredStateConfiguration.InvokeDscResource Kísérleti Kísérleti Kísérleti
PSNativePSPathResolution Kísérleti
PSSubsystemPluginModel Kísérleti Kísérleti Kísérleti
PSNativeCommandArgumentPassing Kísérleti
PSAnsiRenderingFileInfo Kísérleti
PSLoadAssemblyFromNativeCode Kísérleti Kísérleti Kísérleti
PSNativeCommandErrorActionPreference Mainstream
PSFeedbackProvider Kísérleti Kísérleti
PSModuleAutoLoadSkipOfflineFiles Kísérleti Mainstream
PSCommandWithArgs Kísérleti Mainstream
PSNativeWindowsTildeExpansion Kísérleti
PSRedirectToVariable Kísérleti
PSSerializeJSONLongEnumAsNumber Kísérleti

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 -Commandez 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 Standarda 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.dllalrendszer-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" }