Delen via


Wat is er nieuw in PowerShell 7.1

Op 11 november 2020 kondigden we de algemene beschikbaarheid van PowerShell 7.1 aan. Voortbouwend op de basis die is gelegd in PowerShell 7.0, richtten onze inspanningen zich op communityproblemen en omvatten we een aantal verbeteringen en oplossingen. Wij zetten ons in om ervoor te zorgen dat PowerShell een stabiel en presterende platform blijft.

PowerShell 7.1 bevat de volgende functies, updates en breaking changes.

  • PSReadLine 2.1.0, die Predictive IntelliSense bevat
  • PowerShell 7.1 is gepubliceerd in de Microsoft Store
  • Installerpakketten bijgewerkt voor nieuwe OS-versies met ondersteuning voor ARM64
  • 4 nieuwe experimentele rubrieken en 2 experimentele rubrieken die mainstream zijn gepromoot
  • Verschillende breaking changes om de bruikbaarheid te verbeteren

Zie de 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 Predictive IntelliSense. Voor meer informatie over de Predictive IntelliSense-functie, zie de aankondiging in de PowerShell-blog.

Microsoft Store installerpakket

PowerShell 7.1 is uitgebracht in de Microsoft Store. Je kunt de PowerShell-release vinden op de Microsoft Store-website of in de Store-applicatie van Windows.

Voordelen van het Microsoft Store-pakket:

  • Automatische updates die rechtstreeks in Windows zijn ingebouwd
  • Integreert met andere softwaredistributiemechanismen zoals Intune en SCCM

Opmerking

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

Andere installateurs

Voor meer informatie over up-todatum over ondersteunde besturingssystemen en de levenscyclus van ondersteuning, zie de PowerShell Support Lifecycle.

Bekijk de installatie-instructies van je favoriete besturingssysteem:

Daarnaast ondersteunt PowerShell 7.1 ARM32- en ARM64-varianten van Debian, Ubuntu en ARM64 Alpine Linux.

Hoewel het niet officieel wordt ondersteund, heeft de community ook pakketten geleverd voor Arch en Kali Linux.

Opmerking

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine en Arm ondersteunen momenteel geen WinRM-afstandsbediening. Voor details over het instellen van SSH-gebaseerde afstandsbediening, zie PowerShell Afstanden over SSH.

Experimentele functies

Voor meer informatie over experimentele functies, zie Experimentele functies gebruiken.

De volgende experimentele functies zijn nu mainstream features in deze release:

De volgende experimentele functies werden in deze release toegevoegd:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 breidt deze experimentele functie uit om de Runspace-parameter aan alle *-PSBreakpoint cmdlets toe te voegen. De Runspace-parameter specificeert een runspace-object dat interacteert met breakpoints in de gespecificeerde runspace.
  • PSNativePSPathResolution - Deze functie stelt je in staat om PowerShell-providerpaden door te geven aan native commando's die PowerShell-padsyntaxis niet ondersteunen.

  • PSCultureInvariantReplaceOperator - Wanneer de linker operand in een -replace operator-instructie geen string is, wordt die operand omgezet in een string. Met de functie ingeschakeld gebruikt de conversie geen Culture-instellingen voor stringconversie.

  • PSSubsystemPluginModel legt de basis voor toekomstige Predictive IntelliSense-plug-ins te ondersteunen.

Breaking Changes en Verbeteringen

  • Gedragsvergelijking van strengs veranderd in .NET 5.0

    PowerShell 7.1 is gebouwd op .NET 5.0, wat de volgende ingrijpende wijziging introduceerde:

    Vanaf .NET 5.0 negeren vergelijkingen van cultuurinvariante strings niet-printende controletekens.

    Bijvoorbeeld, de volgende twee strings worden als identiek beschouwd:

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

    Het is gebruikelijk dat native commando's schrijven zonder stderr de bedoeling een storing aan te geven. Met deze wijziging $? wordt ingesteld op $false alleen wanneer het native commando ook een niet-nul exitcode heeft. Deze wijziging staat los van de experimentele eigenschap PSNotApplyErrorActionToStderr.

  • Laat de $ErrorActionPreference uitvoer van native commando's niet beïnvloeden stderr (#13361)

    Het is gebruikelijk dat native commando's schrijven zonder stderr de bedoeling een storing aan te geven. Met deze wijziging stderr wordt de output nog steeds vastgelegd in ErrorRecord-objecten , maar de runtime is niet langer van toepassing $ErrorActionPreference als de ErrorRecord afkomstig is van een native commando.

  • Hernoem -FromUnixTime naar -UnixTimeSeconds aan Get-Date om Unix-tijdinvoer mogelijk te maken (#13084) (Bedankt @aetos382!)

    De -FromUnixTime parameter werd toegevoegd tijdens 7.1-preview.2. De parameter werd hernoemd om beter bij het datatype te passen. Deze parameter neemt een geheel getal aan dat sinds 1 januari 1970 in seconden 0:00:00 staat.

    Dit voorbeeld zet een Unix-tijd om (weergegeven door het aantal seconden sinds 1970-01-01 0:00:00) naar DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Laat expliciet gespecificeerde benoemde parameter dezelfde van hashtable splatting vervangen (#13162)

    Met deze wijziging worden de benoemde parameters uit splatting naar het einde van de parameterlijst verplaatst, zodat ze gebonden zijn nadat alle expliciet gespecificeerde benoemde parameters zijn gebonden. Parameterbinding voor eenvoudige functies geeft geen foutmelding wanneer een gespecificeerde benoemde parameter niet gevonden kan worden. Onbekende benoemde parameters zijn gebonden aan de $args parameter van de eenvoudige functie. Het verplaatsen van splatting naar het einde van de argumentlijst verandert de volgorde waarin de parameters verschijnen $args.

    Voorbeeld:

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

    In het vorige gedrag is MyPath er niet aan -Path gebonden omdat het het derde argument in de argumentenlijst is. ## Dus het wordt uiteindelijk in '$args' gestopt 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 naar het einde van de argumentenlijst verplaatst. 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 schakelaarparameter -Qualifier niet positioneel voor Split-Path (#12960) (Bedankt @yecril71pl!)

  • Sluit de werkmap op als letterlijk pad voor Start-Process wanneer het niet is gespecificeerd (#11946) (Bedankt @NoMoreFood!)

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

  • Fix stringparameterbinding voor BigInteger numerieke literalen (#11634) (Dank je @vexx32!)

  • Op Windows Start-Process maakt een procesomgeving met alle omgevingsvariabelen uit de huidige sessie, -UseNewEnvironment waarbij een nieuwe standaard procesomgeving wordt aangemaakt (#10830) (Dank je). @iSazonov!)

  • Return return resultaat niet omwikkelen PSObject bij het converteren van een ScriptBlock naar een delegat (#10619)

    Wanneer a ScriptBlock wordt omgezet naar een gedelegeertype dat in C#-context wordt gebruikt, brengt het wrappen van het resultaat in een PSObject onnodige problemen met zich mee:

    • Wanneer de waarde wordt omgezet naar het type delegate return, wordt de PSObject in feite weer uitgepakt. Dus het PSObject is overbodig.
    • Wanneer het type delegate return is object, wordt het omwikkeld met a PSObject , waardoor het moeilijk is om mee te werken in C#-code.

    Na deze wijziging is het geretourneerde object het onderliggende object.