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.
- PowerShell 7.1 utökar den här experimentella funktionen för att lägga till Runspace-parametern i alla
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 tillstderr
(#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 funktionenPSNotApplyErrorActionToStderr
.Påverka
$ErrorActionPreference
intestderr
utdata från interna kommandon (#13361)Det är vanligt att interna kommandon skrivs till
stderr
utan att ange ett fel. Med den här ändringenstderr
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 medBlah = "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örSplit-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 ettScriptBlock
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 enPSObject
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 enPSObject
vilket gör det svårt att arbeta med i C#-kod.
Efter den här ändringen är det returnerade objektet det underliggande objektet.
- När värdet konverteras till ombudets returtyp, packas i