Nyheter i PowerShell 7.1

Den 11 november 2020 tillkännagav vi allmän tillgänglighet för PowerShell 7.1. Genom att bygga vidare på grunderna i PowerShell 7.0 fokuserar vi på communityproblem och inkluderar ett antal förbättringar och korrigeringar. Vi är fast beslutna att se till att PowerShell förblir en stabil och högpresterande plattform.

PowerShell 7.1 innehåller följande funktioner, uppdateringar och icke-bakåtkompatibla ändringar.

  • PSReadLine 2.1.0, som inkluderar Predictive IntelliSense
  • PowerShell 7.1 har publicerats i Microsoft Store
  • Installationspaket uppdaterade för nya operativsystemversioner med stöd för ARM64
  • 4 nya experimentella funktioner och 2 experimentella funktioner som befordras till mainstream
  • Flera icke-bakåtkompatibla ändringar för att förbättra användbarheten

En fullständig lista över ändringar finns i CHANGELOG på GitHub-lagringsplatsen.

PSReadLine 2.1.0

PowerShell 7.1 innehåller även PSReadLine 2.1.0. Den här versionen innehåller Predictive IntelliSense. Mer information om funktionen Predictive IntelliSense finns i meddelandet i PowerShell-bloggen.

Installationspaket för Microsoft Store

PowerShell 7.1 har publicerats i Microsoft Store. Du hittar PowerShell-versionen på Microsoft Store-webbplatsen eller i Store-programmet i Windows.

Fördelar med Microsoft Store-paketet:

  • Automatiska uppdateringar som är inbyggda direkt i Windows
  • Integrerar med andra mekanismer för programvarudistribution som Intune och SCCM

Anteckning

Konfigurationsinställningar på systemnivå som lagras i $PSHOME kan inte ändras. Detta inkluderar WSMAN-konfigurationen. Detta förhindrar att fjärrsessioner ansluter till Store-baserade installationer av PowerShell. Konfigurationer på användarnivå och SSH-fjärrkommunikation stöds.

Andra installationsprogram

Mer uppdaterad information om operativsystem som stöds och supportlivscykel finns i Livscykel för PowerShell-support.

Kontrollera installationsanvisningarna för önskat operativsystem:

Dessutom stöder PowerShell 7.1 ARM32- och ARM64-varianter av Debian, Ubuntu och ARM64 Alpine Linux.

Communityn har inte officiellt stöd, men har även tillhandahållit paket för Arch och Kali Linux.

Anteckning

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine och Arm stöder för närvarande inte WinRM-fjärrkommunikation. Mer information om hur du konfigurerar SSH-baserad fjärrkommunikation finns i PowerShell-fjärrkommunikation via SSH.

Experimentella funktioner

Mer information om experimentella funktioner finns i Använda experimentella funktioner.

Följande experimentella funktioner är nu vanliga funktioner i den här versionen:

Följande experimentella funktioner har lagts till i den här versionen:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 utökar den här experimentella funktionen för att lägga till Runspace-parametern i alla *-PSBreakpoint cmdletar. Parametern Runspace anger ett Runspace-objekt som ska interagera med brytpunkter i det angivna körningsutrymmet.
  • PSNativePSPathResolution – Med den här funktionen kan du skicka PowerShell-providersökvägar till interna kommandon som inte stöder PowerShell-sökvägssyntax.

  • PSCultureInvariantReplaceOperator – När den vänstra operanden i en -replace operator-instruktion inte är en sträng konverteras operand till en sträng. När funktionen är aktiverad använder konverteringen inte Kulturinställningar för strängkonvertering.

  • PSSubsystemPluginModel lägger grunden för framtida Predictive IntelliSense-plugin-program.

Icke-bakåtkompatibla ändringar och förbättringar

  • Beteendet för strängjämförelse har ändrats i .NET 5.0

    PowerShell 7.1 bygger på .NET 5.0, som introducerade följande icke-bakåtkompatibla ändring:

    Från och med .NET 5.0 ignorerar kulturvarianta strängjämförelser icke-utskriftskontrolltecken.

    Följande två strängar anses till exempel vara identiska:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Åtgärda $? till att inte vara $false när det interna kommandot skriver till stderr (#13395)

    Det är vanligt att interna kommandon skrivs till stderr utan att ange ett fel. Med den här ändringen $? anges endast till $false när det inbyggda kommandot också har en slutkod som inte är noll. Den här ändringen är inte relaterad till den experimentella funktionen PSNotApplyErrorActionToStderr.

  • Påverka $ErrorActionPreference inte stderr utdata från interna kommandon (#13361)

    Det är vanligt att interna kommandon skrivs till stderr utan att ange ett fel. Med den här ändringen stderr hämtas fortfarande utdata i ErrorRecord-objekt , men körningen gäller $ErrorActionPreference inte längre om ErrorRecord kommer från ett internt kommando.

  • Byt -FromUnixTime-UnixTimeSeconds namn till på Get-Date för att tillåta Unix-tidsinmatning (#13084) (tack @aetos382!)

    Parametern -FromUnixTime lades till under 7.1-preview.2. Parametern har bytt namn för att bättre matcha datatypen. Den här parametern tar ett heltalsvärde som representerar i sekunder sedan 1 januari 1970, 0:00:00.

    Det här exemplet konverterar en Unix-tid (representeras av antalet sekunder sedan 1970-01-01 0:00:00) till DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Tillåt uttryckligen angiven namngiven parameter för att ersätta samma från hashtable-splatting (#13162)

    Med den här ändringen flyttas de namngivna parametrarna från splatting till slutet av parameterlistan så att de är bundna när alla uttryckligen angivna namngivna parametrar är bundna. Parameterbindning för enkla funktioner genererar inget fel när det inte går att hitta en angiven namngiven parameter. Okända namngivna parametrar är bundna till parametern $args för den enkla funktionen. Om du flyttar splatting till slutet av argumentlistan ändras ordningen som parametrarna visas i $args.

    Exempel:

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

    I föregående beteende är MyPath inte bundet till -Path eftersom det är det tredje argumentet i argumentlistan. ## Så det slutar med att det fylls i "$args" tillsammans med Blah = "World"

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

    Med den här ändringen flyttas argumenten från @hash till slutet av argumentlistan. MyPath blir det första argumentet i listan, så det är bundet till -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Gör växelparametern -Qualifier inte positionell för Split-Path (#12960) (Tack @yecril71pl!)

  • Lös arbetskatalogen som literalsökväg för Start-Process när den inte har angetts (#11946) (Tack @NoMoreFood!)

  • Gör så -OutFile att parametern i webb-cmdletar fungerar som -LiteralPath (#11701) (tack @iSazonov!)

  • Åtgärda strängparameterbindning för BigInteger numeriska literaler (#11634) (tack @vexx32!)

  • I Windows Start-Process skapar en processmiljö med alla miljövariabler från den aktuella sessionen, med hjälp av -UseNewEnvironment skapar en ny standardprocessmiljö (#10830) (Tack @iSazonov!)

  • Omslut inte returresultatet PSObject när du konverterar ett ScriptBlock till ett ombud (#10619)

    När en ScriptBlock konverteras till en ombudstyp som ska användas i C#-kontext medför omslutning av resultatet i en PSObject onödiga problem:

    • När värdet konverteras till ombudets returtyp, packas i PSObject princip upp. PSObject Så är onödig.
    • När den delegerade returtypen är object, omsluts den i en PSObject vilket gör det svårt att arbeta med i C#-kod.

    Efter den här ändringen är det returnerade objektet det underliggande objektet.