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.
- PowerShell 7.1 breidt deze experimentele functie uit om de runspace-parameter toe te voegen aan alle
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 naarstderr
(#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 functiePSNotApplyErrorActionToStderr
.De
$ErrorActionPreference
uitvoer van systeemeigen opdrachten niet beïnvloedenstderr
(#13361)Het is gebruikelijk dat systeemeigen opdrachten naar
stderr
schrijven zonder dat het de bedoeling is om een fout aan te geven. Met deze wijzigingstderr
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
aanGet-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 metBlah = "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 voorSplit-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 eenScriptBlock
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 eenPSObject
onnodige problemen op:- Wanneer de waarde wordt geconverteerd naar het retourtype gedelegeerde, wordt de
PSObject
in wezen uitgepakt. Dus dePSObject
is overbodig. - Wanneer het retourtype gedelegeerde is, wordt
object
het verpakt in eenPSObject
, waardoor het moeilijk is om mee te werken in C#-code.
Na deze wijziging is het geretourneerde object het onderliggende object.
- Wanneer de waarde wordt geconverteerd naar het retourtype gedelegeerde, wordt de