Delen via


Nieuw in PowerShell 7.1

Op 11 november 2020 hebben we de algemene beschikbaarheid van PowerShell 7.1 aangekondigd. Voortbouwend op de basis van PowerShell 7.0, zijn onze inspanningen gericht op communityproblemen en omvatten een aantal verbeteringen en oplossingen. We doen er alles aan om ervoor te zorgen dat PowerShell een stabiel en goed presterend platform blijft.

PowerShell 7.1 bevat de volgende functies, updates en wijzigingen die fouten veroorzaken.

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

Zie het CHANGELOG in de GitHub-opslagplaats voor een volledige lijst met wijzigingen.

PSReadLine 2.1.0

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

Microsoft Store-installatiepakket

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

Voordelen van het Microsoft Store-pakket:

  • Automatische updates die rechtstreeks in Windows zijn ingebouwd
  • Integreert 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 Store gebaseerde installaties van PowerShell. Configuraties op gebruikersniveau en externe SSH-communicatie worden ondersteund.

Andere installatieprogramma's

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

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

Daarnaast ondersteunt PowerShell 7.1 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 externe communicatie met WinRM. Zie Externe toegang van PowerShell via SSH voor meer informatie over het instellen van externe communicatie op basis van SSH.

Experimentele functies

Zie Experimentele functies gebruiken voor meer informatie over de experimentele functies.

De volgende experimentele functies zijn nu basisfuncties 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 runspace-parameter toe te voegen aan alle *-PSBreakpoint cmdlets. Met de parameter Runspace wordt een Runspace-object opgegeven voor interactie met onderbrekingspunten in de opgegeven runspace.
  • PSNativePSPathResolution : met deze functie kunt u paden van De PowerShell-provider doorgeven aan systeemeigen opdrachten die geen ondersteuning bieden voor powerShell-padsyntaxis.

  • PSCultureInvariantReplaceOperator : wanneer de linkeroperand in een -replace operatorinstructie geen tekenreeks is, wordt die operand geconverteerd naar een tekenreeks. Als de functie is ingeschakeld, maakt de conversie geen gebruik van cultuurinstellingen voor tekenreeksconversie.

  • PSSubsystemPluginModel legt de basis voor de ondersteuning van toekomstige voorspellende IntelliSense-invoegtoepassingen.

Belangrijke wijzigingen en verbeteringen

  • Vergelijkingsgedrag van tekenreeksen gewijzigd in .NET 5.0

    PowerShell 7.1 is gebaseerd op .NET 5.0, waarmee de volgende wijziging is geïntroduceerd die fouten veroorzaakt:

    Vanaf .NET 5.0 negeren cultuurvariante tekenreeksvergelijkingen niet-afdrukbare besturingstekens.

    De volgende twee tekenreeksen worden bijvoorbeeld als identiek beschouwd:

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

    Het is gebruikelijk dat systeemeigen opdrachten naar stderr schrijven zonder dat het de bedoeling is om een fout aan te geven. Met deze wijziging $? wordt alleen ingesteld $false op wanneer de systeemeigen opdracht ook een niet-nul afsluitcode heeft. Deze wijziging is niet gerelateerd aan de experimentele functie PSNotApplyErrorActionToStderr.

  • De $ErrorActionPreference uitvoer van systeemeigen opdrachten niet beïnvloeden stderr (#13361)

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

  • Wijzig de naam -FromUnixTime in -UnixTimeSeconds 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 zodat deze beter overeenkomt met het gegevenstype. Deze parameter gebruikt een geheel getal dat staat voor in seconden 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) geconverteerd naar DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Expliciet opgegeven benoemde parameter toestaan om dezelfde parameter te vervangen door hashtable splatting (#13162)

    Met deze wijziging worden de benoemde parameters van splatting verplaatst naar het einde van de lijst met parameters, zodat ze worden gebonden nadat alle expliciet opgegeven benoemde parameters zijn gebonden. Parameterbinding voor eenvoudige functies genereert geen fout wanneer een opgegeven benoemde parameter niet kan worden gevonden. Onbekende benoemde parameters zijn gebonden aan de $args parameter van de functie Simple. Als u splatting verplaatst naar het einde van de argumentenlijst, 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. ## Dus het eindigt in '$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 argumentenlijst. 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
    
  • De schakelparameter -Qualifier niet positioneel maken voor Split-Path (#12960) (Bedankt @yecril71pl!)

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

  • Maak -OutFile een parameter in web-cmdlets om te werken als -LiteralPath (#11701) (Bedankt @iSazonov!)

  • Binding van tekenreeksparameter voor BigInteger numerieke letterlijke waarden (#11634) herstellen (bedankt) @vexx32!)

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

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

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

    • Wanneer de waarde wordt geconverteerd naar het retourtype gedelegeerde, wordt de PSObject in wezen uitgepakt. Dus de PSObject is overbodig.
    • Wanneer het retourtype gedelegeerde is, wordt objecthet verpakt in een PSObject , waardoor het moeilijk is om mee te werken in C#-code.

    Na deze wijziging is het geretourneerde object het onderliggende object.