Novinky v PowerShellu 7.1

11. listopadu 2020 jsme oznámili obecnou dostupnost PowerShellu 7.1. Naše úsilí zaměřené na komunitní problémy, které vychází ze základů vytvořených v PowerShellu 7.0, a zahrnuje řadu vylepšení a oprav. Snažíme se zajistit, aby PowerShell zůstal stabilní a výkonný.

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.
  • Instalační balíčky aktualizované pro nové verze operačního systému s podporou ARM64
  • 4 nové experimentální funkce a 2 experimentální funkce propagované do hlavního proudu
  • Několik zásadníchzměnch

Ú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í IntelliSense. Další informace o funkci Prediktivní IntelliSense najdete v oznámení v blogu PowerShellu.

Instalační balíček Microsoft Storu

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 Microsoft Storu:

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

Poznámka

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

Další instalační programy

Další aktuální informace o podporovaných operačních systémech a životním cyklu podpory najdete v životním cyklu podpory PowerShellu.

Projděte si pokyny k instalaci upřednostňovaného operačního systému:

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

Komunita sice oficiálně nepodporuje, ale také poskytuje balíčky pro Arch a Kali Linux.

Poznámka

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine a Arm v současné době 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žívání experimentálních funkcí.

V této verzi jsou nyní hlavní funkce následujících experimentálních funkcí:

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 a přidá parametr Runspace do všech *-PSBreakpoint rutin. Parametr Runspace určuje objekt Runspace pro interakci se zarážky v zadaném prostoru runspace.
  • PSNativePSPathResolution – Tato funkce umožňuje předávat cesty zprostředkovatele PowerShellu nativním příkazům, které nepodporují syntaxi cesty PowerShellu.

  • PSCultureInvariantReplaceOperator - Pokud levý operand v -replace příkazu operátoru není řetězec, tento operand se převede na řetězec. S povolenou funkcí převod nepoužívá nastavení jazykové verze pro převod řetězců.

  • PSSubsystemPluginModel představuje základ podpory budoucích modulů plug-in Prediktivní IntelliSense.

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

  • Chování porovnání řetězců se změnilo v .NET 5.0

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

    Od verze .NET 5.0 ignorují porovnání invariantních řetězců 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 nebyla $false při zápisu nativního příkazu do stderr aplikace (#13395)

    Nativní příkazy se dají zapisovat stderr bez úmyslu indikovat selhání. Při této změně $? je nastaven $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.

  • Nemá $ErrorActionPreference vliv na stderr výstup nativních příkazů (#13361)

    Nativní příkazy se dají zapisovat stderr bez úmyslu indikovat selhání. Při této změně stderr se výstup stále zaznamenává v objektech ErrorRecord , ale modul runtime se už použije $ErrorActionPreference , pokud chybaZáznam pochází z nativního příkazu.

  • Přejmenujte na -UnixTimeSeconds zapnuto -FromUnixTimeGet-Date, aby bylo možné povolit vstup času unixu (#13084) (Díky@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 čas unixu (reprezentovaný počtem sekund od roku 1970-01-01 01 00:00:00) na DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Povolit explicitně zadaný pojmenovaný parametr nahradit stejný parametr z hodnot hashtable splatting (#13162)

    Při této změně se pojmenované parametry z splattingu přesunou na konec seznamu parametrů, aby byly vázané po všech explicitně zadaných pojmenovaných parametrech. Vazby parametrů pro jednoduché funkce nevyvolají chybu, pokud zadaný pojmenovaný parametr nebyl nalezen. Neznámé pojmenované parametry jsou vázané na $args parametr jednoduché funkce. Přesunutí splattingu na konec seznamu argumentů změní pořadí, ve $argskteré se parametry zobrazí .

    Příklad:

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

    V předchozím chování není MyPath vázán, -Path protože je to třetí argument v seznamu argumentů. ## Takže skončí vycpaný do "$args" spolu s Blah = "World"

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

    Při této změně se argumenty ze @hash seznamu argumentů 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 není poziční pro Split-Path (#12960) (Díky @yecril71pl!)

  • Řešení pracovního adresáře jako cesty literálu, Start-Process pokud není zadán (#11946) (Děkujeme) @NoMoreFood!)

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

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

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

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

    ScriptBlock Při převodu na typ delegáta, který se má použít v kontextu jazyka C#, zabalte výsledek do PSObject nepotřebných problémů:

    • Když se hodnota převede na návratový typ delegáta, v PSObject podstatě se rozbalí. Takže je PSObject nepotřebný.
    • Když je objectnávratový typ delegáta, zabalí se do PSObject kódu jazyka C#.

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