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 podstawach utworzonych w programie PowerShell 7.0, nasze wysiłki koncentrowały się na problemach społeczności i obejmują szereg ulepszeń i poprawek. Dokładamy starań, aby program PowerShell pozostał 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 predykcyjną funkcję IntelliSense
- Program PowerShell 7.1 został opublikowany w Sklepie Microsoft
- 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 DZIENNIK ZMIAN w repozytorium GitHub.
PSReadLine 2.1.0
Program PowerShell 7.1 zawiera również program PSReadLine 2.1.0. Ta wersja obejmuje predykcyjną funkcję IntelliSense. 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. Wersję programu PowerShell można znaleźć w witrynie internetowej sklepu Microsoft Store lub w aplikacji Store 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 wsparcia technicznego, zobacz Cykl wsparcia technicznego 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 zdalniej 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 Korzystanie z 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ę funkcję eksperymentalną, 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ę funkcję eksperymentalną, 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 stronie w
-replace
instrukcji operatora nie jest ciągiem, operand jest konwertowany na ciąg. Po włączeniu tej funkcji konwersja nie używa ustawień kultury do konwersji ciągów.PSSubsystemPluginModel stanowi podstawy do obsługi przyszłych wtyczek predykcyjnej funkcji IntelliSense.
Istotne zmiany 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ść:
Na platformie .NET 5.0 porównania niezmiennych ciągów kultury ignorują znaki kontrolek niedrukowane.
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
$?
, która nie występuje$false
, gdy polecenie natywne zapisuje w plikustderr
(#13395)Typowe jest, aby polecenia natywne zapisywały
stderr
dane bez zamiaru wskazywania awarii. Ta zmiana$?
jest ustawiona na$false
wartość tylko wtedy, gdy natywne polecenie 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)Typowe jest, aby polecenia natywne zapisywały
stderr
dane bez zamiaru wskazywania awarii. Dzięki tej zmianiestderr
dane wyjściowe są nadal przechwytywane w obiektach ErrorRecord , ale środowisko uruchomieniowe nie ma już zastosowania$ErrorActionPreference
, jeśli element ErrorRecord pochodzi z natywnego polecenia.Zmień nazwę
-FromUnixTime
na-UnixTimeSeconds
włączoneGet-Date
, aby zezwolić na wprowadzanie danych wejściowych czasu systemu Unix (#13084) (dzięki @aetos382!)Parametr
-FromUnixTime
został dodany podczas wersji 7.1-preview.2. Nazwa parametru została zmieniona w celu lepszego dopasowania do typu danych. Ten parametr przyjmuje wartość całkowitą, która jest reprezentowana w sekundach od 1 stycznia 1970, 0:00:00.W tym przykładzie jest konwertowany czas systemu Unix (reprezentowany przez liczbę sekund od 1970-01-01 0:00:00) do daty/godziny.
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
Zezwalaj jawnie określonemu nazwanemu parametrowi na zastępowanie tego samego parametru z tworzenia skrótów (#13162)
Dzięki tej zmianie nazwane parametry z platania są przenoszone na końcu listy parametrów, aby były powiązane po jawnie określonych nazwanych parametrach 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 platformy na koniec listy argumentów zmienia kolejność wyświetlania parametrów w pliku$args
.Na przykład:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
W poprzednim zachowaniu ścieżka MyPath nie jest powiązana,
-Path
ponieważ jest to trzeci argument na liście argumentów. ## Więc kończy się ono wypchanym do "$args" wraz zBlah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
Dzięki tej zmianie argumenty z
@hash
są przenoszone na koniec 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 na niepozycyjny 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!)Utwórz
-OutFile
parametr w poleceniach cmdlet sieci Web, aby działał jak-LiteralPath
(#11701) (Dzięki @iSazonov!)Poprawiono powiązanie parametrów ciągu dla
BigInteger
literałów liczbowych (#11634) (Dzięki @vexx32!)W systemie Windows
Start-Process
program tworzy środowisko procesu ze wszystkimi zmiennymi środowiskowymi z bieżącej sesji przy użyciu polecenia-UseNewEnvironment
tworzy nowe domyślne środowisko procesu (#10830) (Dzięki @iSazonov!)Nie zawijaj zwracanych wyników
PSObject
podczas konwertowaniaScriptBlock
na delegata (#10619)Gdy element
ScriptBlock
jest konwertowany 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 jest niezapisany.PSObject
Więc jest niepotrzebny. - Gdy zwracany typ delegata to
object
, zostaje opakowany,PSObject
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,