Co nowego w programie PowerShell 7.1
11 listopada 2020 r. ogłosiliśmy ogólną dostępność programu PowerShell 7.1. Opierając się na fundamentach ustanowionych w programie PowerShell 7.0, nasze wysiłki koncentrowały się na problemach społeczności i obejmują szereg ulepszeń i poprawek. Zobowiązujemy się do zapewnienia, że program PowerShell pozostaje stabilną i wydajną platformą.
Program PowerShell 7.1 zawiera następujące funkcje, aktualizacje i zmiany powodujące niezgodność.
- PSReadLine 2.1.0, który obejmuje funkcję Predykcyjnej funkcji IntelliSense
- Program PowerShell 7.1 został opublikowany w Sklepie Microsoft Store
- Pakiety instalatora zaktualizowane dla nowych wersji systemu operacyjnego z obsługą usługi ARM64
- 4 nowe funkcje eksperymentalne i 2 funkcje eksperymentalne promowane do głównego nurtu
- Kilka zmian powodujących niezgodność w celu poprawy użyteczności
Aby uzyskać pełną listę zmian, zobacz CHANGELOG w repozytorium GitHub.
PSReadLine 2.1.0
Program PowerShell 7.1 zawiera również program PSReadLine 2.1.0. Ta wersja obejmuje funkcję IntelliSense predykcyjną. Aby uzyskać więcej informacji na temat funkcji Predykcyjnej funkcji IntelliSense, zobacz ogłoszenie w blogu programu PowerShell.
Pakiet instalatora sklepu Microsoft Store
Program PowerShell 7.1 został opublikowany w Sklepie Microsoft Store. Wydanie programu PowerShell można znaleźć w witrynie internetowej sklepu Microsoft Store lub w aplikacji Sklep w systemie Windows.
Zalety pakietu Microsoft Store:
- Aktualizacje automatyczne wbudowane bezpośrednio w system Windows
- Integruje się z innymi mechanizmami dystrybucji oprogramowania, takimi jak Intune i SCCM
Uwaga
Nie można modyfikować żadnych ustawień konfiguracji na poziomie systemu przechowywanych w $PSHOME
programie. Obejmuje to konfigurację programu WSMAN. Zapobiega to nawiązywaniu połączenia sesji zdalnych z instalacjami programu PowerShell opartymi na magazynie. Obsługiwane są konfiguracje na poziomie użytkownika i komunikacja zdalna SSH.
Inne instalatory
Aby uzyskać więcej aktualnych informacji na temat obsługiwanych systemów operacyjnych i cyklu życia pomocy technicznej, zobacz Cykl życia pomocy technicznej programu PowerShell.
Sprawdź instrukcje instalacji preferowanego systemu operacyjnego:
Ponadto program PowerShell 7.1 obsługuje wersje ARM32 i ARM64 systemów Debian, Ubuntu i ARM64 Alpine Linux.
Chociaż nie jest oficjalnie obsługiwana, społeczność udostępnia również pakiety dla arch i Kali Linux.
Uwaga
Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine i Arm obecnie nie obsługują komunikacji z usługą WinRM. Aby uzyskać szczegółowe informacje na temat konfigurowania komunikacji zdalnej opartej na protokole SSH, zobacz Komunikacja zdalna programu PowerShell za pośrednictwem protokołu SSH.
Funkcje eksperymentalne
Aby uzyskać więcej informacji na temat funkcji eksperymentalnych, zobacz Używanie funkcji eksperymentalnych.
Następujące funkcje eksperymentalne są teraz głównymi funkcjami w tej wersji:
W tej wersji dodano następujące funkcje eksperymentalne:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- Program PowerShell 7.1 rozszerza tę eksperymentalną funkcję, aby dodać parametr Runspace do wszystkich
*-PSBreakpoint
poleceń cmdlet. Parametr Runspace określa obiekt Runspace do interakcji z punktami przerwania w określonej przestrzeni uruchomieniowej.
- Program PowerShell 7.1 rozszerza tę eksperymentalną funkcję, aby dodać parametr Runspace do wszystkich
PSNativePSPathResolution — ta funkcja umożliwia przekazywanie ścieżek dostawcy programu PowerShell do natywnych poleceń, które nie obsługują składni ścieżki programu PowerShell.
PSCultureInvariantReplaceOperator — gdy operand po lewej
-replace
stronie w instrukcji operatora nie jest ciągiem, operand jest konwertowany na ciąg. Po włączeniu funkcji konwersja nie używa ustawień kultury do konwersji ciągów.PsSubsystemPluginModel stanowi podstawy do obsługi przyszłych wtyczek predykcyjnej funkcji IntelliSense.
Zmiany powodujące niezgodność i ulepszenia
Zachowanie porównania ciągów zostało zmienione na platformie .NET 5.0
Program PowerShell 7.1 jest oparty na platformie .NET 5.0, która wprowadziła następującą zmianę powodującą niezgodność:
Od platformy .NET 5.0 niezmienne porównania ciągów kultury ignorują znaki sterujące niedrukcyjne.
Na przykład następujące dwa ciągi są uważane za identyczne:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
Poprawka nie jest
$false
równa$?
, gdy polecenia natywne są zapisywane wstderr
pliku (#13395)Często zdarza się, że polecenia natywne zapisu
stderr
na nie mają zamiaru wskazywać awarii. Ta zmiana$?
jest ustawiona na wartość$false
tylko wtedy, gdy polecenie natywne ma również kod zakończenia inny niż zero. Ta zmiana nie jest powiązana z funkcjąPSNotApplyErrorActionToStderr
eksperymentalną .Nie
$ErrorActionPreference
wpływaj nastderr
dane wyjściowe poleceń natywnych (#13361)Często zdarza się, że polecenia natywne zapisu
stderr
na nie mają zamiaru wskazywać awarii. Dzięki tej zmianiestderr
dane wyjściowe są nadal przechwytywane w obiektach ErrorRecord , ale środowisko uruchomieniowe nie ma już zastosowania$ErrorActionPreference
, jeśli wartość ErrorRecord pochodzi z polecenia natywnego.Zmień nazwę
-FromUnixTime
na-UnixTimeSeconds
włączoneGet-Date
, aby zezwolić na wprowadzanie danych czasowych systemu Unix (#13084) (Dzięki @aetos382!)Parametr
-FromUnixTime
został dodany podczas wersji 7.1-preview.2. Zmieniono nazwę parametru, aby lepiej dopasować typ danych. Ten parametr przyjmuje wartość całkowitą, która reprezentuje w sekundach od 1 stycznia 1970, 0:00:00.Ten przykład konwertuje czas systemu Unix (reprezentowany przez liczbę sekund od 1970-01-01 01 0:00:00) do daty/godziny.
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
Zezwalaj jawnie określonym nazwanym parametrom na zastępowanie tego samego parametru z splattingu w formie skrótu (#13162)
Dzięki tej zmianie nazwane parametry zplatania są przenoszone na końcu listy parametrów, aby były one powiązane po tym, jak wszystkie jawnie określone nazwane parametry są powiązane. Powiązanie parametrów dla prostych funkcji nie zgłasza błędu, gdy nie można odnaleźć określonego nazwanego parametru. Nieznane nazwane parametry są powiązane z parametrem
$args
prostej funkcji. Przeniesienie splatting na końcu listy argumentów zmienia kolejność wyświetlania parametrów w pliku$args
.Przykład:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
W poprzednim zachowaniu program MyPath nie jest powiązany z
-Path
tym, ponieważ jest to trzeci argument na liście argumentów. ## Więc kończy się to wypchane do "$args" wraz zBlah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
Po tej zmianie argumenty z
@hash
są przenoszone na końcu listy argumentów. MyPath staje się pierwszym argumentem na liście, więc jest powiązany z-Path
.PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
Ustaw parametr
-Qualifier
przełącznika, aby nie pozycyjny dlaSplit-Path
(#12960) (Dzięki @yecril71pl!)Rozwiąż katalog roboczy jako ścieżkę literału,
Start-Process
jeśli nie został określony (#11946) (Dzięki @NoMoreFood!)Ustaw
-OutFile
parametr w poleceniach cmdlet sieci Web tak, aby działał jak-LiteralPath
(#11701) (Dzięki @iSazonov!)Naprawiono powiązanie parametrów ciągu dla
BigInteger
literałów liczbowych (#11634) (Dzięki @vexx32!)W systemie Windows
Start-Process
tworzy środowisko procesu ze wszystkimi zmiennymi środowiskowymi z bieżącej sesji przy użyciu tworzenia-UseNewEnvironment
nowego domyślnego środowiska procesu (#10830) (Dzięki @iSazonov!)Nie zawijaj zwracanych wyników podczas
PSObject
konwertowania naScriptBlock
delegata (#10619)ScriptBlock
Po przekonwertowaniu elementu na typ delegata, który ma być używany w kontekście języka C#, zawijanie wyniku wPSObject
wyniku powoduje niepotrzebne problemy:- Gdy wartość jest konwertowana na typ zwracany delegata,
PSObject
zasadniczo zostaje on niezapisany.PSObject
Więc jest niepotrzebny. - Gdy typ zwracanego delegata to
object
, zostaje opakowany w elementPSObject
, co utrudnia pracę z kodem w języku C#.
Po tej zmianie zwrócony obiekt jest obiektem bazowym.
- Gdy wartość jest konwertowana na typ zwracany delegata,