Co nowego w programie PowerShell 7,1What's New in PowerShell 7.1

11 listopada 2020 ogłoszono ogólne udostępnienie programu PowerShell 7,1.On November 11, 2020 we announced the general availability of PowerShell 7.1. Opracowując w programie PowerShell 7,0, nasze wysiłki koncentrują się na problemach ze społecznością i zawierają szereg ulepszeń i poprawek.Building on the foundation established in PowerShell 7.0, our efforts focused on community issues and include a number of improvements and fixes. Firma Microsoft zobowiązuje się do zapewnienia, że program PowerShell pozostaje stabilną i wydajną platformą.We are committed to ensuring that PowerShell remains a stable and performant platform.

Program PowerShell 7,1 zawiera następujące funkcje, aktualizacje i istotne zmiany.PowerShell 7.1 includes the following features, updates, and breaking changes.

  • PSReadLine 2.1.0, który obejmuje technologię analizy predykcyjnejPSReadLine 2.1.0, which includes Predictive IntelliSense
  • Program PowerShell 7,1 został opublikowany w Microsoft StorePowerShell 7.1 has been published to the Microsoft Store
  • Zaktualizowano pakiety Instalatora dla nowych wersji systemu operacyjnego z obsługą ARM64Installer packages updated for new OS versions with support for ARM64
  • 4 nowe funkcje eksperymentalne i 2 funkcje eksperymentalne, które zostały podwyższone do poziomu podstawowego4 new experimental features and 2 experimental features promoted to mainstream
  • Kilka istotnych zmian zwiększających użytecznośćSeveral breaking changes to improve usability

Aby uzyskać pełną listę zmian, zobacz Dziennik zmian w repozytorium GitHub.For a complete list of changes, see the CHANGELOG in the GitHub repository.

PSReadLine 2.1.0PSReadLine 2.1.0

Program PowerShell 7,1 zawiera również PSReadLine 2.1.0.PowerShell 7.1 also include PSReadLine 2.1.0. Ta wersja zawiera predykcyjną funkcję IntelliSense.This version includes Predictive IntelliSense. Aby uzyskać więcej informacji na temat funkcji IntelliSense predykcyjnej, zapoznaj się z ogłoszeniem w blogu programu PowerShell.For more information about the Predictive IntelliSense feature, see the announcement in the PowerShell blog.

Pakiet Instalatora Microsoft StoreMicrosoft Store installer package

Program PowerShell 7,1 został opublikowany w Microsoft Store.PowerShell 7.1 has been published to the Microsoft Store. Wydanie programu PowerShell można znaleźć w witrynie sieci Web Microsoft Store lub w aplikacji ze sklepu w systemie Windows.You can find the PowerShell release on the Microsoft Store website or in the Store application in Windows.

Zalety pakietu Microsoft Store:Benefits of the Microsoft Store package:

  • Aktualizacje automatyczne wbudowane w system Windows 10Automatic updates built right into Windows 10
  • Integruje się z innymi mechanizmami dystrybucji oprogramowania, takimi jak usługa Intune i program SCCMIntegrates with other software distribution mechanisms like Intune and SCCM

Uwaga

Nie można modyfikować żadnych ustawień konfiguracji na poziomie systemu przechowywanych w programie $PSHOME .Any system-level configuration settings stored in $PSHOME cannot be modified. Obejmuje to konfigurację usługi WSMAN.This includes the WSMAN configuration. Zapobiega to łączeniu sesji zdalnych z instalacjami programu PowerShell w oparciu o magazyn.This prevents remote sessions from connecting to Store-based installs of PowerShell. Obsługiwane są konfiguracje na poziomie użytkownika i komunikacja zdalna SSH.User-level configurations and SSH remoting are supported.

Inne InstalatoryOther installers

Aby uzyskać więcej informacji na temat obsługiwanych systemów operacyjnych i cyklu pomocy technicznej, zobacz cykl życia pomocy technicznej programu PowerShell.For more up-to-date information about supported operating systems and support lifecycle, see the PowerShell Support Lifecycle.

Sprawdź instrukcje instalacji dla preferowanego systemu operacyjnego:Check the installation instructions for your preferred operating system:

Ponadto program PowerShell 7,1 obsługuje typy ARM32 i ARM64 Debian, Ubuntu i ARM64 Alpine Linux.Additionally, PowerShell 7.1 supports ARM32 and ARM64 flavors of Debian, Ubuntu, and ARM64 Alpine Linux.

Chociaż nie jest to oficjalnie obsługiwane, społeczność udostępniła również pakiety dla programu Arch i Kali Linux.While not officially supported, the community has also provided packages for Arch and Kali Linux.

Uwaga

Debian 10 +, CentOS 8 +, Ubuntu 20,04, Alpine i ARM obecnie nie obsługują komunikacji zdalnej usługi WinRM.Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine and Arm currently do not support WinRM remoting. 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.For details on setting up SSH-based remoting, see PowerShell Remoting over SSH.

Funkcje eksperymentalneExperimental Features

Aby uzyskać więcej informacji na temat funkcji eksperymentalnych, zobacz Korzystanie z funkcji eksperymentalnych.For more information about the Experimental Features, see Using Experimental Features.

Następujące funkcje eksperymentalne są teraz typowymi funkcjami w tej wersji:The following experimental features are now mainstream features in this release:

W tej wersji dodano następujące funkcje eksperymentalne:The following experimental features were added in this release:

  • Microsoft. PowerShell. Utility. PSManageBreakpointsInRunspaceMicrosoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • Program PowerShell 7,1 rozszerza tę funkcję eksperymentalną, aby dodać parametr obszaru działania do wszystkich *-PSBreakpoint poleceń cmdlet.PowerShell 7.1 extends this experimental feature to add the Runspace parameter to all *-PSBreakpoint cmdlets. Parametr obszaru działania określa obiekt obszaru działania do współpracy z punktami przerwania w określonym obszarze działania.The Runspace parameter specifies a Runspace object to interact with breakpoints in the specified runspace.
  • PSNativePSPathResolution — ta funkcja pozwala przekazać ścieżki dostawcy programu PowerShell do poleceń natywnych, które nie obsługują składni ścieżki programu PowerShell.PSNativePSPathResolution - This feature allows you to pass PowerShell provider paths to native commands that don't support PowerShell path syntax.

  • PSCultureInvariantReplaceOperator — gdy operand z lewej strony w -replace instrukcji operatora nie jest ciągiem, ten operand jest konwertowany na ciąg.PSCultureInvariantReplaceOperator - When the left-hand operand in a -replace operator statement is not a string, that operand is converted to a string. Po włączeniu funkcji konwersja nie używa ustawień kultury do konwersji ciągów.With the feature enabled, the conversion does not use Culture settings for string conversion.

  • PSSubsystemPluginModel określa podstawę do obsługi przyszłych wtyczek technologii IntelliSense.PSSubsystemPluginModel lays the groundwork to support future Predictive IntelliSense plug-ins.

Istotne zmiany i ulepszeniaBreaking Changes and Improvements

  • Popraw $? , aby nie mieć $false czasu zapisywania poleceń natywnych w stderr (#13395)Fix $? to not be $false when native command writes to stderr (#13395)

    Jest to typowy dla poleceń natywnych do zapisu stderr bez zamiaru wskazywania błędu.It is common for native commands to write to stderr without intending to indicate a failure. Ta zmiana $? jest ustawiana na $false tylko wtedy, gdy natywne polecenie ma również niezerowy kod zakończenia.With this change $? is set to $false only when the native command also has a non-zero exit code. Ta zmiana nie jest związana z funkcją eksperymentalną PSNotApplyErrorActionToStderr .This change is unrelated to the experimental feature PSNotApplyErrorActionToStderr.

  • $ErrorActionPreferenceNie wpływa na stderr dane wyjściowe poleceń natywnych (#13361)Make $ErrorActionPreference not affect stderr output of native commands (#13361)

    Jest to typowy dla poleceń natywnych do zapisu stderr bez zamiaru wskazywania błędu.It is common for native commands to write to stderr without intending to indicate a failure. Ta zmiana powoduje, stderr że dane wyjściowe są nadal przechwytywane w obiektach ErrorRecord , ale środowisko uruchomieniowe nie ma już zastosowania, $ErrorActionPreference Jeśli ErrorRecord pochodzi z polecenia macierzystego.With this change, stderr output is still captured in ErrorRecord objects, but the runtime no longer applies $ErrorActionPreference if the ErrorRecord comes from a native command.

  • Zmień nazwę na -FromUnixTime -UnixTimeSeconds na Get-Date , aby zezwolić na wprowadzanie danych czasu systemu UNIX (#13084) (Dziękujemy @aetos382 !)Rename -FromUnixTime to -UnixTimeSeconds on Get-Date to allow Unix time input (#13084) (Thanks @aetos382!)

    -FromUnixTimeParametr został dodany podczas 7,1-Preview. 2.The -FromUnixTime parameter was added during 7.1-preview.2. Nazwa parametru została zmieniona w celu lepszego dopasowania do typu danych.The parameter was renamed to better match the data type. Ten parametr przyjmuje liczbę całkowitą, która reprezentuje w sekundach od 1 stycznia 1970 do 0:00:00.This parameter takes an integer value that represents in seconds since January 1, 1970, 0:00:00.

    Ten przykład umożliwia konwertowanie czasu systemu UNIX (reprezentowanego przez liczbę sekund od 1970-01-01 0:00:00) do DateTime.This example converts a Unix time (represented by the number of seconds since 1970-01-01 0:00:00) to DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Zezwalaj jawnie określony parametr nazwany do zastąpienia tego samego elementu z elementu Hashtable korzystając (#13162)Allow explicitly specified named parameter to supersede the same one from hashtable splatting (#13162)

    W przypadku tej zmiany nazwane parametry z korzystając są przenoszone na koniec listy parametrów, tak aby były powiązane po powiązaniu wszystkich jawnie określonych parametrów nazwanych.With this change, the named parameters from splatting are moved to the end of the parameter list so that they are bound after all explicitly specified named parameters are bound. Powiązanie parametrów dla prostych funkcji nie zgłasza błędu, jeśli nie można znaleźć określonego nazwanego parametru.Parameter binding for simple functions doesn't throw an error when a specified named parameter cannot be found. Nieznane parametry nazwane są powiązane z $args parametrem prostej funkcji.Unknown named parameters are bound to the $args parameter of the simple function. Przeniesienie korzystając na koniec listy argumentów zmienia kolejność, w której pojawiają się parametry $args .Moving splatting to the end of the argument list changes the order the parameters appears in $args.

    Na przykład:For example:

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    W poprzednim zachowaniu ścieżka nie jest powiązana z, -Path ponieważ jest to trzeci argument na liście argumentów.In the previous behavior, MyPath is not bound to -Path because it's the third argument in the argument list. # #, Tak aby kończyło się w "$args" wraz z Blah = "World"## So it ends up being stuffed into '$args' along with Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    W przypadku tej zmiany argumenty z @hash są przenoszone na koniec listy argumentów.With this change, the arguments from @hash are moved to the end of the argument list. Ścieżka do pierwszego argumentu na liście jest powiązana z -Path .MyPath becomes the first argument in the list, so it is bound to -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Ustaw parametr przełącznika jako -Qualifier niepozycyjny Split-Path (#12960) (Dziękujemy @yecril71pl !)Make the switch parameter -Qualifier not positional for Split-Path (#12960) (Thanks @yecril71pl!)

  • Rozpoznawanie katalogu roboczego jako ścieżki literału, Start-Process gdy nie jest określony (#11946) (Dziękujemy @NoMoreFood !)Resolve the working directory as literal path for Start-Process when it's not specified (#11946) (Thanks @NoMoreFood!)

  • Ustaw -OutFile parametr w poleceniach cmdlet sieci Web tak, aby działały jak -LiteralPath (#11701) (Dziękujemy @iSazonov !)Make -OutFile parameter in web cmdlets to work like -LiteralPath (#11701) (Thanks @iSazonov!)

  • Naprawianie powiązania parametrów ciągu dla BigInteger literałów liczbowych (#11634) (Dziękujemy @vexx32 !)Fix string parameter binding for BigInteger numeric literals (#11634) (Thanks @vexx32!)

  • W systemie Windows program Start-Process tworzy środowisko procesu ze wszystkimi zmiennymi środowiskowymi z bieżącej sesji przy użyciu programu, -UseNewEnvironment który tworzy nowe domyślne środowisko procesu (#10830) (Dziękujemy @iSazonov !)On Windows, Start-Process creates a process environment with all the environment variables from current session, using -UseNewEnvironment creates a new default process environment (#10830) (Thanks @iSazonov!)

  • Nie Zawijaj wyniku powrotu PSObject podczas konwersji ScriptBlock do delegata (#10619)Do not wrap return result in PSObject when converting a ScriptBlock to a delegate (#10619)

    Gdy ScriptBlock jest konwertowany na typ delegata, który ma być używany w kontekście języka C#, opakowanie wyniku w programie powoduje PSObject niepotrzebne problemy:When a ScriptBlock is converted to a delegate type to be used in C# context, wrapping the result in a PSObject brings unneeded troubles:

    • Gdy wartość zostanie przekonwertowana na zwracany typ delegata, PSObject zasadniczo jest nieopakowany.When the value is converted to the delegate return type, the PSObject essentially gets unwrapped. W związku z tym PSObject jest niepotrzebny.So the PSObject is unneeded.
    • Gdy typem zwracanym delegata jest object , jest on zawijany w stanie, w którym PSObject trudno jest korzystać z kodu C#.When the delegate return type is object, it gets wrapped in a PSObject making it hard to work with in C# code.

    Po tej zmianie zwracany obiekt jest obiektem źródłowym.After this change, the returned object is the underlying object.