Wat is er nieuw in PowerShell 7.1

Op 11 november 2020 hebben we de algemene beschikbaarheid van PowerShell 7.1 aangekondigd. Op basis van de basis die in PowerShell 7.0 tot stand is gebracht, hebben we ons gericht op problemen met de community en zijn we uitgebouwd op een aantal verbeteringen en oplossingen. We zetten ons in om ervoor te zorgen dat PowerShell een stabiel en goed presterend platform blijft.

PowerShell 7.1 bevat de volgende functies, updates en belangrijke wijzigingen.

  • PSReadLine 2.1.0, waaronder Predictive IntelliSense
  • PowerShell 7.1 is gepubliceerd naar de Microsoft Store
  • Installatiepakketten bijgewerkt voor nieuwe besturingssysteemversies met ondersteuning voor ARM64
  • 4 nieuwe experimentele functies en 2 experimentele functies gepromoveerd naar de algemene versie
  • Verschillende belangrijke wijzigingen om de bruikbaarheid te verbeteren

Zie changelog in de opslagplaats GitHub een volledige lijst met wijzigingen.

PSReadLine 2.1.0

PowerShell 7.1 bevat ook PSReadLine 2.1.0. Deze versie bevat Predictive IntelliSense. Zie de aankondiging in de PowerShell-blog voor meer informatie over de functie Predictive IntelliSense.

Microsoft Store installer-pakket

PowerShell 7.1 is gepubliceerd naar de Microsoft Store. U vindt de PowerShell-release op de Microsoft Store website of in de Store-toepassing in Windows.

Voordelen van het Microsoft Store pakket:

  • Automatische updates ingebouwd in Windows
  • Kan worden geïntegreerd met andere softwaredistributiemechanismen zoals Intune en SCCM

Notitie

Configuratie-instellingen op systeemniveau die zijn opgeslagen in $PSHOME kunnen niet worden gewijzigd. Dit omvat de WSMAN-configuratie. Dit voorkomt dat externe sessies verbinding maken met op de Store gebaseerde installaties van PowerShell. Configuraties op gebruikersniveau en SSH-remoting worden ondersteund.

Andere installatieprogramma's

Zie De levenscyclus van PowerShell-ondersteuning voor meer actuele informatie over ondersteunde besturingssystemen en ondersteuningslevenscyclus.

Controleer de installatie-instructies voor het besturingssysteem van uw voorkeur:

Daarnaast biedt PowerShell 7.1 ondersteuning voor ARM32- en ARM64-varianten van Debian, Ubuntu en ARM64 Alpine Linux.

Hoewel dit niet officieel wordt ondersteund, biedt de community ook pakketten voor Arch en Kali Linux.

Notitie

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine en Arm bieden momenteel geen ondersteuning voor remoting van WinRM. Zie Voor meer informatie over het instellen van op SSH gebaseerde remoting PowerShell Remoting via SSH.

Experimentele functies

Zie Experimentele functies gebruiken voor meer informatie over experimentele functies.

De volgende experimentele functies zijn nu gangbare functies in deze release:

De volgende experimentele functies zijn toegevoegd in deze release:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 breidt deze experimentele functie uit om de runspaceparameter toe te voegen aan alle *-PSBreakpoint cmdlets. De Runspace parameter geeft u een Runspace-object om te communiceren met onderbrekingspunten in de opgegeven runspace.
  • PSNativePSPathResolution : met deze functie kunt u PowerShell-providerpaden doorgeven aan systeemeigen opdrachten die geen ondersteuning bieden voor de syntaxis van het PowerShell-pad.

  • PSCultureInvariantReplaceOperator : wanneer de linkeropeen na in -replace een operatorin instructie geen tekenreeks is, wordt die operand geconverteerd naar een tekenreeks. Als de functie is ingeschakeld, gebruikt de conversie geen cultuurinstellingen voor tekenreeksconversie.

  • PSSubsystemPluginModel legt de basis voor de ondersteuning van toekomstige Predictive IntelliSense-in plug-ins.

Belangrijke wijzigingen en verbeteringen

  • Vergelijkingsgedrag van tekenreeksen is gewijzigd in .NET 5.0

    PowerShell 7.1 is gebouwd op .NET 5.0, waardoor de volgende wijziging is geïntroduceerd:

    Vanaf .NET 5.0 worden niet-afdrukbesturingselementtekens genegeerd door invariante tekenreeksvergelijkingen.

    De volgende twee tekenreeksen worden bijvoorbeeld als identiek beschouwd:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Oplossing $? is niet wanneer de $false native opdracht naar schrijft stderr (#13395)

    Het is gebruikelijk dat native opdrachten naar schrijven stderr zonder een fout aan te geven. Met deze wijziging $? wordt ingesteld op $false alleen wanneer de native opdracht ook een afsluitende code heeft die niet nul is. Deze wijziging is niet gerelateerd aan de experimentele functie PSNotApplyErrorActionToStderr.

  • Uitvoer $ErrorActionPreference van native stderr opdrachten niet beïnvloeden (#13361)

    Het is gebruikelijk dat native opdrachten naar schrijven stderr zonder een fout aan te geven. Met deze wijziging wordt de stderr uitvoer nog steeds vastgelegd in ErrorRecord-objecten , maar de runtime $ErrorActionPreference is niet meer van toepassing als de ErrorRecord afkomstig is van een native opdracht.

  • Wijzig -FromUnixTime de naam -UnixTimeSeconds in aan Get-Date om Unix-tijdinvoer toe te staan (#13084) (Bedankt @aetos382!)

    De -FromUnixTime parameter is toegevoegd tijdens 7.1-preview.2. De naam van de parameter is gewijzigd om beter overeen te komen met het gegevenstype. Deze parameter heeft een geheel getal dat in seconden wordt vertegenwoordigd sinds 1 januari 1970, 0:00:00.

    In dit voorbeeld wordt een Unix-tijd (vertegenwoordigd door het aantal seconden sinds 1970-01-01 0:00:00) ge converteerd naar DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Expliciet opgegeven benoemde parameter toestaan om dezelfde parameter uit hashtabelsplatting te verzwelgen (#13162)

    Met deze wijziging worden de benoemde parameters van splatting verplaatst naar het einde van de lijst met parameters, zodat ze zijn gebonden nadat alle expliciet opgegeven benoemde parameters zijn gebonden. Parameterbinding voor eenvoudige functies veroorzaakt geen fout wanneer een opgegeven benoemde parameter niet kan worden gevonden. Onbekende benoemde parameters zijn gebonden aan de $args parameter van de eenvoudige functie. Als u splatting verplaatst naar het einde van de lijst met argumenten, verandert de volgorde waarin de parameters worden weergegeven in $args.

    Bijvoorbeeld:

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

    In het vorige gedrag is MyPath niet gebonden aan -Path omdat dit het derde argument in de lijst met argumenten is. ## Het eindigt dus op '$args' samen met Blah = "World"

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

    Met deze wijziging worden de argumenten van @hash verplaatst naar het einde van de lijst met argumenten. MyPath wordt het eerste argument in de lijst, dus het is gebonden aan -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Maak de switchparameter -Qualifier niet positioneel voor Split-Path (#12960) (Bedankt @yecril71pl!)

  • De map oplossen als letterlijk pad Start-Process voor wanneer deze niet is opgegeven (#11946) (Bedankt @NoMoreFood!)

  • Parameter -OutFile in web-cmdlets laten werken zoals -LiteralPath (#11701) (Bedankt @iSazonov!)

  • Binding van tekenreeksparameters BigInteger voor numerieke letterlijke waarde (#11634) opgelost (bedankt @vexx32!)

  • Op Windows maakt Start-Process een procesomgeving met alle omgevingsvariabelen van de huidige sessie met -UseNewEnvironment behulp van maakt een nieuwe standaard procesomgeving (#10830) (Bedankt @iSazonov!)

  • Retourresultaat niet verpakken in bij PSObject het converteren van een ScriptBlock naar een gemachtigde (#10619)

    Wanneer een ScriptBlock wordt geconverteerd naar een gemachtigdentype dat moet worden gebruikt in C#-context, leidt het verpakken van het resultaat in PSObject een tot onnodige problemen:

    • Wanneer de waarde wordt geconverteerd naar het retourtype gemachtigde, PSObject wordt de in wezen uitschreven. PSObject De is dus onnodig.
    • Wanneer het retourtype gemachtigde is object, wordt deze verpakt in PSObject een waardoor het lastig is om met in C#-code te werken.

    Na deze wijziging is het geretourneerde object het onderliggende object.