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.
  • 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 w stderr 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ą PSNotApplyErrorActionToStderreksperymentalną .

  • Nie $ErrorActionPreference wpływaj na stderr dane wyjściowe poleceń natywnych (#13361)

    Często zdarza się, że polecenia natywne zapisu stderr na nie mają zamiaru wskazywać awarii. Dzięki tej zmianie stderr 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łączone Get-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 z Blah = "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 dla Split-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 na ScriptBlock delegata (#10619)

    ScriptBlock Po przekonwertowaniu elementu na typ delegata, który ma być używany w kontekście języka C#, zawijanie wyniku w PSObject 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 element PSObject , co utrudnia pracę z kodem w języku C#.

    Po tej zmianie zwrócony obiekt jest obiektem bazowym.