Sdílet prostřednictvím


Novinky v PowerShellu 7.1

11. listopadu 2020 jsme oznámili obecnou dostupnost PowerShellu 7.1. V návaznosti na základ vytvořený v PowerShellu 7.0 se naše úsilí zaměřilo na problémy komunity a zahrnuje řadu vylepšení a oprav. Snažíme se zajistit, aby PowerShell zůstal stabilní a výkonnou platformou.

PowerShell 7.1 obsahuje následující funkce, aktualizace a zásadní změny.

  • PSReadLine 2.1.0, který zahrnuje prediktivní intellisense
  • PowerShell 7.1 byl publikován v Microsoft Storu
  • Aktualizace instalačních balíčků pro nové verze operačního systému s podporou ARM64
  • 4 nové experimentální funkce a 2 experimentální funkce povýšené do hlavní fáze
  • Několik zásadních změn pro zlepšení použitelnosti

Úplný seznam změn najdete v protokolu CHANGELOG v úložišti GitHub.

PSReadLine 2.1.0

PowerShell 7.1 obsahuje také PSReadLine 2.1.0. Tato verze zahrnuje prediktivní technologii IntelliSense. Další informace o funkci Prediktivní IntelliSense najdete v oznámení v blogu o PowerShellu.

Instalační balíček pro Microsoft Store

PowerShell 7.1 byl publikován v Microsoft Storu. Verzi PowerShellu najdete na webu Microsoft Store nebo v aplikaci Store ve Windows.

Výhody balíčku pro Microsoft Store:

  • Automatické aktualizace integrované přímo ve Windows
  • Integruje se s dalšími mechanismy distribuce softwaru, jako jsou Intune a SCCM

Poznámka

Žádná nastavení konfigurace na úrovni systému uložená v $PSHOME nástroji nelze změnit. To zahrnuje konfiguraci WSMAN. Tím se zabrání připojení vzdálených relací k instalacím PowerShellu založeným na Storu. Podporují se konfigurace na úrovni uživatele a vzdálené komunikace SSH.

Další instalační programy

Aktuální informace o podporovaných operačních systémech a životním cyklu podpory najdete v tématu Životní cyklus podpory PowerShellu.

Projděte si pokyny k instalaci preferovaného operačního systému:

PowerShell 7.1 navíc podporuje verze ARM32 a ARM64 pro Debian, Ubuntu a ARM64 Alpine Linux.

I když se tato komunita oficiálně nepodporuje, poskytuje také balíčky pro Arch a Kali Linux.

Poznámka

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine a Arm momentálně nepodporují vzdálené komunikace WinRM. Podrobnosti o nastavení vzdálené komunikace založené na SSH najdete v tématu Vzdálené komunikace PowerShellu přes SSH.

Experimentální funkce

Další informace o experimentálních funkcích najdete v tématu Použití experimentálních funkcí.

Následující experimentální funkce jsou teď v této verzi běžnými funkcemi:

V této verzi byly přidány následující experimentální funkce:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 rozšiřuje tuto experimentální funkci o přidání parametru Runspace do všech *-PSBreakpoint rutin. Parametr Runspace určuje objekt Runspace pro interakci se zarážkou v zadaném prostředí runspace.
  • PSNativePSPathResolution – tato funkce umožňuje předávat cesty zprostředkovatele PowerShellu nativním příkazům, které nepodporují syntaxi cest PowerShellu.

  • PSCultureInvariantReplaceOperator – pokud levý operand v -replace příkazu operator není řetězec, převede se tento operand na řetězec. Když je tato funkce povolená, převod nepoužívá nastavení jazykové verze pro převod řetězců.

  • PSSubsystemPluginModel představuje základy pro podporu budoucích modulů plug-in Prediktivní IntelliSense.

Zásadní změny a vylepšení

  • Změna chování při porovnávání řetězců v .NET 5.0

    PowerShell 7.1 je založený na rozhraní .NET 5.0, které zavedlo následující zásadní změnu:

    Od verze .NET 5.0 netisknutá porovnání řetězců jazykové verze ignorují netisknutelných řídicích znaků.

    Například následující dva řetězce jsou považovány za identické:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Oprava $? , aby to nebylo, $false když nativní příkaz zapisuje do stderr (#13395)

    Je běžné, že nativní příkazy píší do stderr , aniž by chtěly znamenat selhání. S touto změnou $? je nastavena na $false pouze v případě, že nativní příkaz má také nenulový ukončovací kód. Tato změna nesouvisí s experimentální funkcí PSNotApplyErrorActionToStderr.

  • Neovlivnit $ErrorActionPreferencestderr výstup nativních příkazů (#13361)

    Je běžné, že nativní příkazy píší do stderr , aniž by chtěly znamenat selhání. S touto změnou stderr je výstup stále zaznamenán v objektech ErrorRecord , ale modul runtime již neplatí $ErrorActionPreference , pokud ErrorRecord pochází z nativního příkazu.

  • Přejmenujte na na , Get-Date aby bylo možné zadat unixový čas (#13084) (Díky -UnixTimeSeconds-FromUnixTime@aetos382!)

    Parametr -FromUnixTime byl přidán během verze 7.1 preview.2. Parametr byl přejmenován tak, aby lépe odpovídal datovému typu. Tento parametr přebírá celočíselnou hodnotu, která představuje v sekundách od 1. ledna 1970 0:00:00.

    Tento příklad převede unixový čas (reprezentovaný počtem sekund od 1970-01-01 0:00:00) na dateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Povolení explicitně zadaného pojmenovaného parametru pro nahrazení stejného parametru z hashtable splatting (#13162)

    Díky této změně se pojmenované parametry ze splattingu přesunou na konec seznamu parametrů, aby byly vázány po svážení všech explicitně zadaných pojmenovaných parametrů. Vazba parametrů pro jednoduché funkce nevyvolá chybu, pokud nelze najít zadaný pojmenovaný parametr. Neznámé pojmenované parametry jsou vázány k parametru $args jednoduché funkce. Přesunutím splattingu na konec seznamu argumentů se změní pořadí, v jakém se parametry zobrazují v $args.

    Příklad:

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    V předchozím chování není cesta MyPath vázána, -Path protože je třetím argumentem v seznamu argumentů. ## Takže se nakonec nacpe do "$args" spolu s Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    Po této změně se argumenty z @hash přesunou na konec seznamu argumentů. MyPath se stane prvním argumentem v seznamu, takže je vázán na -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Nastavení parametru -Qualifier přepínače jako nepoziční pro Split-Path (#12960) (Díky @yecril71pl!)

  • Přeložte pracovní adresář jako cestu literálu, Start-Process pokud není zadaný (#11946) (Díky @NoMoreFood!)

  • Nastavení -OutFile parametru ve webových rutinách tak, aby fungoval jako -LiteralPath (#11701) (Díky @iSazonov!)

  • Oprava vazby řetězcových parametrů pro BigInteger číselné literály (#11634) (Díky @vexx32!)

  • Ve Windows Start-Process vytvoří prostředí procesu se všemi proměnnými prostředí z aktuální relace pomocí příkazu -UseNewEnvironment vytvoří nové výchozí prostředí procesu (#10830) (Díky @iSazonov!)

  • Při převodu ScriptBlock na delegáta nezalamujte výsledek PSObject vrácení do (#10619)

    ScriptBlock Když se objekt převede na typ delegáta, který se má použít v kontextu C#, zabalení výsledku PSObject do způsobí nepotřebné potíže:

    • Při převodu hodnoty na návratový typ delegáta PSObject se v podstatě rozbalí. Takže je PSObject nepotřebné.
    • Když je objectnávratový typ delegáta , zabalí se do objektu PSObject , který ztěžuje práci s kódem jazyka C#.

    Po této změně je vrácený objekt podkladovým objektem.