Novinky v PowerShellu 7.1
11. listopadu 2020 jsme oznámili obecnou dostupnost PowerShellu 7.1. V návaznosti na základ vytvořený v PowerShellu 7.0 se naše úsilí zaměřilo na problémy komunity a zahrnuje řadu vylepšení a oprav. Snažíme se zajistit, aby PowerShell zůstal stabilní a výkonnou platformou.
PowerShell 7.1 obsahuje následující funkce, aktualizace a zásadní změny.
- PSReadLine 2.1.0, který zahrnuje prediktivní intellisense
- PowerShell 7.1 byl publikován v Microsoft Storu
- Aktualizace instalačních balíčků pro nové verze operačního systému s podporou ARM64
- 4 nové experimentální funkce a 2 experimentální funkce povýšené do hlavní fáze
- Několik zásadních změn pro zlepšení použitelnosti
Úplný seznam změn najdete v protokolu CHANGELOG v úložišti GitHub.
PSReadLine 2.1.0
PowerShell 7.1 obsahuje také PSReadLine 2.1.0. Tato verze zahrnuje prediktivní technologii IntelliSense. Další informace o funkci Prediktivní IntelliSense najdete v oznámení v blogu o PowerShellu.
Instalační balíček pro Microsoft Store
PowerShell 7.1 byl publikován v Microsoft Storu. Verzi PowerShellu najdete na webu Microsoft Store nebo v aplikaci Store ve Windows.
Výhody balíčku pro Microsoft Store:
- Automatické aktualizace integrované přímo ve Windows
- Integruje se s dalšími mechanismy distribuce softwaru, jako jsou Intune a SCCM
Poznámka
Žádná nastavení konfigurace na úrovni systému uložená v $PSHOME
nástroji nelze změnit. To zahrnuje konfiguraci WSMAN. Tím se zabrání připojení vzdálených relací k instalacím PowerShellu založeným na Storu. Podporují se konfigurace na úrovni uživatele a vzdálené komunikace SSH.
Další instalační programy
Aktuální informace o podporovaných operačních systémech a životním cyklu podpory najdete v tématu Životní cyklus podpory PowerShellu.
Projděte si pokyny k instalaci preferovaného operačního systému:
PowerShell 7.1 navíc podporuje verze ARM32 a ARM64 pro Debian, Ubuntu a ARM64 Alpine Linux.
I když se tato komunita oficiálně nepodporuje, poskytuje také balíčky pro Arch a Kali Linux.
Poznámka
Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine a Arm momentálně nepodporují vzdálené komunikace WinRM. Podrobnosti o nastavení vzdálené komunikace založené na SSH najdete v tématu Vzdálené komunikace PowerShellu přes SSH.
Experimentální funkce
Další informace o experimentálních funkcích najdete v tématu Použití experimentálních funkcí.
Následující experimentální funkce jsou teď v této verzi běžnými funkcemi:
V této verzi byly přidány následující experimentální funkce:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1 rozšiřuje tuto experimentální funkci o přidání parametru Runspace do všech
*-PSBreakpoint
rutin. Parametr Runspace určuje objekt Runspace pro interakci se zarážkou v zadaném prostředí runspace.
- PowerShell 7.1 rozšiřuje tuto experimentální funkci o přidání parametru Runspace do všech
PSNativePSPathResolution – tato funkce umožňuje předávat cesty zprostředkovatele PowerShellu nativním příkazům, které nepodporují syntaxi cest PowerShellu.
PSCultureInvariantReplaceOperator – pokud levý operand v
-replace
příkazu operator není řetězec, převede se tento operand na řetězec. Když je tato funkce povolená, převod nepoužívá nastavení jazykové verze pro převod řetězců.PSSubsystemPluginModel představuje základy pro podporu budoucích modulů plug-in Prediktivní IntelliSense.
Zásadní změny a vylepšení
Změna chování při porovnávání řetězců v .NET 5.0
PowerShell 7.1 je založený na rozhraní .NET 5.0, které zavedlo následující zásadní změnu:
Od verze .NET 5.0 netisknutá porovnání řetězců jazykové verze ignorují netisknutelných řídicích znaků.
Například následující dva řetězce jsou považovány za identické:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
Oprava
$?
, aby to nebylo,$false
když nativní příkaz zapisuje dostderr
(#13395)Je běžné, že nativní příkazy píší do
stderr
, aniž by chtěly znamenat selhání. S touto změnou$?
je nastavena na$false
pouze v případě, že nativní příkaz má také nenulový ukončovací kód. Tato změna nesouvisí s experimentální funkcíPSNotApplyErrorActionToStderr
.Neovlivnit
$ErrorActionPreference
stderr
výstup nativních příkazů (#13361)Je běžné, že nativní příkazy píší do
stderr
, aniž by chtěly znamenat selhání. S touto změnoustderr
je výstup stále zaznamenán v objektech ErrorRecord , ale modul runtime již neplatí$ErrorActionPreference
, pokud ErrorRecord pochází z nativního příkazu.Přejmenujte na na ,
Get-Date
aby bylo možné zadat unixový čas (#13084) (Díky-UnixTimeSeconds
-FromUnixTime
@aetos382!)Parametr
-FromUnixTime
byl přidán během verze 7.1 preview.2. Parametr byl přejmenován tak, aby lépe odpovídal datovému typu. Tento parametr přebírá celočíselnou hodnotu, která představuje v sekundách od 1. ledna 1970 0:00:00.Tento příklad převede unixový čas (reprezentovaný počtem sekund od 1970-01-01 0:00:00) na dateTime.
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
Povolení explicitně zadaného pojmenovaného parametru pro nahrazení stejného parametru z hashtable splatting (#13162)
Díky této změně se pojmenované parametry ze splattingu přesunou na konec seznamu parametrů, aby byly vázány po svážení všech explicitně zadaných pojmenovaných parametrů. Vazba parametrů pro jednoduché funkce nevyvolá chybu, pokud nelze najít zadaný pojmenovaný parametr. Neznámé pojmenované parametry jsou vázány k parametru
$args
jednoduché funkce. Přesunutím splattingu na konec seznamu argumentů se změní pořadí, v jakém se parametry zobrazují v$args
.Příklad:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
V předchozím chování není cesta MyPath vázána,
-Path
protože je třetím argumentem v seznamu argumentů. ## Takže se nakonec nacpe do "$args" spolu sBlah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
Po této změně se argumenty z
@hash
přesunou na konec seznamu argumentů. MyPath se stane prvním argumentem v seznamu, takže je vázán na-Path
.PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
Nastavení parametru
-Qualifier
přepínače jako nepoziční proSplit-Path
(#12960) (Díky @yecril71pl!)Přeložte pracovní adresář jako cestu literálu,
Start-Process
pokud není zadaný (#11946) (Díky @NoMoreFood!)Nastavení
-OutFile
parametru ve webových rutinách tak, aby fungoval jako-LiteralPath
(#11701) (Díky @iSazonov!)Oprava vazby řetězcových parametrů pro
BigInteger
číselné literály (#11634) (Díky @vexx32!)Ve Windows
Start-Process
vytvoří prostředí procesu se všemi proměnnými prostředí z aktuální relace pomocí příkazu-UseNewEnvironment
vytvoří nové výchozí prostředí procesu (#10830) (Díky @iSazonov!)Při převodu
ScriptBlock
na delegáta nezalamujte výsledekPSObject
vrácení do (#10619)ScriptBlock
Když se objekt převede na typ delegáta, který se má použít v kontextu C#, zabalení výsledkuPSObject
do způsobí nepotřebné potíže:- Při převodu hodnoty na návratový typ delegáta
PSObject
se v podstatě rozbalí. Takže jePSObject
nepotřebné. - Když je
object
návratový typ delegáta , zabalí se do objektuPSObject
, který ztěžuje práci s kódem jazyka C#.
Po této změně je vrácený objekt podkladovým objektem.
- Při převodu hodnoty na návratový typ delegáta