Co nowego w programie PowerShell 7.0

Program PowerShell 7.0 to wersja programu PowerShell typu open source, międzyplatformowa (Windows, macOS i Linux) utworzona w celu zarządzania środowiskami heterogenicznymi i chmurą hybrydową.

W tej wersji wprowadzamy szereg nowych funkcji, w tym:

  • Przetwarzanie równoległe potoków za pomocą polecenia ForEach-Object -Parallel
  • Nowe operatory:
    • Operatorternary: a ? b : c
    • Operatory łańcucha potoków: || i &&
    • Operatory warunkowe o wartości null: ?? i ??=
  • Uproszczony i dynamiczny widok błędów oraz Get-Error polecenie cmdlet ułatwiające badanie błędów
  • Warstwa zgodności, która umożliwia użytkownikom importowanie modułów w niejawnej sesji Windows PowerShell
  • Automatyczne powiadomienia o nowej wersji
  • Możliwość wywoływania zasobów DSC bezpośrednio z programu PowerShell 7 (eksperymentalna)

Aby wyświetlić pełną listę funkcji i poprawek, zobacz dzienniki zmian.

Gdzie mogę zainstalować program PowerShell?

Program PowerShell 7 obecnie obsługuje następujące systemy operacyjne na platformie x64, w tym:

  • Windows 8.1 i 10
  • Windows Server 2012, 2012 R2, 2016 i 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7
  • Fedora 30+
  • Debian 9
  • Ubuntu LTS 16.04+
  • Alpine Linux 3.8+

Ponadto program PowerShell 7.0 obsługuje wersje ARM32 i ARM64 debian, Ubuntu i ARM64 Alpine Linux.

Zapoznaj się z instrukcjami dotyczącymi instalacji preferowanego systemu operacyjnego Windows, macOS lub Linux.

Chociaż nie jest oficjalnie obsługiwana, społeczność udostępnia również pakiety dla arch i Kali Linux.

Uwaga

Debian 10 i CentOS 8 obecnie nie obsługują komunikacji zdalniej usługi 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.

Aby uzyskać więcej aktualnych informacji na temat obsługiwanych systemów operacyjnych i cyklu wsparcia technicznego, zobacz Cykl wsparcia technicznego programu PowerShell.

Uruchamianie programu PowerShell 7

Program PowerShell 7 jest instalowany w katalogu niezależnie od Windows PowerShell. Dzięki temu można uruchamiać program PowerShell 7 obok Windows PowerShell 5.1. W przypadku programu PowerShell 6.x program PowerShell 7 jest uaktualnieniem w miejscu, które usuwa program PowerShell 6.x.

  • Program PowerShell 7 jest zainstalowany w programie %programfiles%\PowerShell\7
  • Folder %programfiles%\PowerShell\7 jest dodawany do $env:PATH

Pakiet instalatora programu PowerShell 7 uaktualnia poprzednie wersje programu PowerShell 6.x:

  • Program PowerShell 6.x w systemie Windows: %programfiles%\PowerShell\6 został zastąpiony przez %programfiles%\PowerShell\7
  • Linux: /opt/microsoft/powershell/6 jest zastępowany przez /opt/microsoft/powershell/7
  • macOS: /usr/local/microsoft/powershell/6 jest zastępowany przez /usr/local/microsoft/powershell/7

Uwaga

W Windows PowerShell plik wykonywalny do uruchomienia programu PowerShell nosi nazwę powershell.exe. W wersji 6 lub nowszej nazwa pliku wykonywalnego jest zmieniana tak, aby obsługiwała wykonywanie równoległe. Nowa nazwa pliku wykonywalnego do uruchomienia programu PowerShell 7 to pwsh.exe. Kompilacje w wersji zapoznawczej pozostają w miejscu, a pwsh-preview nie pwsh w katalogu 7-preview.

Ulepszona zgodność wsteczna z Windows PowerShell

Program PowerShell 7.0 oznacza przejście do platformy .NET Core 3.1, co umożliwia znacznie większą zgodność z poprzednimi wersjami z istniejącymi modułami Windows PowerShell. Obejmuje to wiele modułów w systemie Windows, które wymagają funkcji graficznego interfejsu użytkownika, takich jak Out-GridView i Show-Command, a także wiele modułów zarządzania rolami, które są dostarczane jako część systemu Windows.

W przypadku systemu Windows nowy parametr przełącznika UseWindowsPowerShell jest dodawany do polecenia Import-Module. Ten przełącznik tworzy moduł proxy w programie PowerShell 7, który używa lokalnego procesu Windows PowerShell do niejawnego uruchamiania wszystkich poleceń cmdlet zawartych w tym module. Aby uzyskać więcej informacji na temat modułu Import-Module.

Aby uzyskać więcej informacji na temat modułów firmy Microsoft współdziałających z programem PowerShell 7.0, zobacz tabelę zgodności modułów.

Wykonywanie równoległe dodane do ForEach-Object

Polecenie ForEach-Object cmdlet, które iteruje elementy w kolekcji, ma teraz wbudowany równoległość z nowym parametrem Parallel .

Domyślnie bloki skryptów równoległych używają bieżącego katalogu roboczego obiektu wywołującego, który uruchamiał zadania równoległe.

Ten przykład pobiera 50 000 wpisów dziennika z 5 dzienników systemowych na lokalnym komputerze z systemem Windows:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Parametr Parallel określa blok skryptu uruchamiany równolegle dla każdej nazwy dziennika wejściowego.

Nowy parametr ThrottleLimit ogranicza liczbę bloków skryptu uruchomionych równolegle w danym momencie. Wartość domyślna to 5.

Użyj zmiennej $_ do reprezentowania bieżącego obiektu wejściowego w bloku skryptu. $using: Użyj zakresu, aby przekazać odwołania do zmiennych do uruchomionego bloku skryptu.

Aby uzyskać więcej informacji o forEach-Object.

Operator Ternary

Program PowerShell 7.0 wprowadza operatorternary, który zachowuje się jak uproszczona if-else instrukcja. Ternary operator programu PowerShell jest ściśle wzorowany na składni operatoraternary języka C#:

<condition> ? <if-true> : <if-false>

Wyrażenie-warunek jest zawsze obliczane i jego wynik przekonwertowany na wartość logiczną , aby określić, która gałąź jest obliczana dalej:

  • Wyrażenie <if-true> jest wykonywane, jeśli <condition> wyrażenie ma wartość true
  • Wyrażenie <if-false> jest wykonywane, jeśli <condition> wyrażenie ma wartość false

Na przykład:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

W tym przykładzie, jeśli ścieżka istnieje, zostanie wyświetlona ścieżka . Jeśli ścieżka nie istnieje, zostanie wyświetlona pozycja Ścieżka nie zostanie znaleziona .

Aby uzyskać więcej informacji na temat if.

Operatory łańcucha potoków

Program PowerShell 7 implementuje operatory && i || w celu warunkowego łączenia potoków. Te operatory są znane w programie PowerShell jako "operatory łańcucha potoków" i są podobne do i LUB list w powłokach, takich jak bash i zsh, a także symbole przetwarzania warunkowego w powłoce poleceń systemu Windows (cmd.exe).

Operator && wykonuje potok po prawej stronie, jeśli potok po lewej stronie zakończył się pomyślnie. Z kolei operator wykonuje potok po prawej stronie, || jeśli potok po lewej stronie zakończył się niepowodzeniem.

Uwaga

Te operatory używają $? zmiennych i $LASTEXITCODE do określenia, czy potok zakończył się niepowodzeniem. Dzięki temu można używać ich z poleceniami natywnymi, a nie tylko poleceniami cmdlet lub funkcjami.

W tym miejscu pierwsze polecenie zakończy się pomyślnie, a drugie polecenie zostanie wykonane:

Write-Output 'First' && Write-Output 'Second'
First
Second

W tym miejscu pierwsze polecenie kończy się niepowodzeniem, a drugie nie jest wykonywane:

Write-Error 'Bad' && Write-Output 'Second'
Write-Error: Bad

W tym miejscu pierwsze polecenie powiedzie się, drugie polecenie nie jest wykonywane:

Write-Output 'First' || Write-Output 'Second'
First

W tym miejscu pierwsze polecenie kończy się niepowodzeniem, więc drugie polecenie jest wykonywane:

Write-Error 'Bad' || Write-Output 'Second'
Write-Error 'Bad'
Second

Aby uzyskać więcej informacji na temat operatorów łańcucha potoków.

Łączenie wartości null, przypisywanie i operatory warunkowe

Program PowerShell 7 zawiera operator ??łączenia wartości Null, operator warunkowego przypisania ??=null i operatory ?. dostępu warunkowego o wartości Null oraz ?[].

Operator łączenia wartości null ??

Operator ?? łączenia wartości null zwraca wartość operandu po lewej stronie, jeśli nie ma wartości null. W przeciwnym razie oblicza operand po prawej stronie i zwraca jego wynik. Operator ?? nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie daje wartość inną niż null.

$x = $null
$x ?? 100
100

W poniższym przykładzie operand po prawej stronie nie zostanie oceniony:

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Operator przypisania warunkowego o wartości null ?? =

Operator ??= przypisania warunkowego o wartości null przypisuje wartość operandu prawego do operandu po lewej stronie tylko wtedy, gdy argument operacji po lewej stronie ma wartość null. Operator ??= nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie daje wartość inną niż null.

$x = $null
$x ??= 100
$x
100

W poniższym przykładzie operand po prawej stronie nie jest oceniany:

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Operatory dostępu warunkowego o wartości null ?. I? [] (eksperymentalne)

Uwaga

Jest to funkcja eksperymentalna o nazwie PSNullConditionalOperators. Aby uzyskać więcej informacji, zobacz Korzystanie z funkcji eksperymentalnych.

Operator warunkowy o wartości null zezwala na dostęp do składowych, ?., lub dostępu do elementu, do operandu tylko wtedy, ?[]gdy argument operacji ma wartość inną niż null; w przeciwnym razie zwraca wartość null.

Uwaga

Ponieważ program PowerShell może ? być częścią nazwy zmiennej, formalna specyfikacja nazwy zmiennej jest wymagana do korzystania z tych operatorów. Dlatego należy używać {} nazw zmiennych, takich jak ${a} lub , gdy ? jest częścią nazwy ${a?}zmiennej .

W poniższym przykładzie zwracana jest wartość właściwości elementu członkowskiego Status :

$Service = Get-Service -Name 'bits'
${Service}?.status
Stopped

Poniższy przykład zwraca wartość null bez próby uzyskania dostępu do stanu nazwy elementu członkowskiego:

$service = $Null
${Service}?.status

Podobnie, używając polecenia ?[], zwracana jest wartość elementu:

$a = 1..10
${a}?[0]
1

A gdy operand ma wartość null, element nie jest dostępny i zwracana jest wartość null:

$a = $null
${a}?[0]

Aby uzyskać więcej informacji About_Operators.

Nowy widok ConciseView i polecenie cmdlet Get-Error

Program PowerShell 7.0 rozszerza wyświetlanie komunikatów o błędach, aby zwiększyć czytelność błędów interakcyjnych i skryptów przy użyciu nowego widoku domyślnego ConciseView. Widoki można wybierać przez użytkownika za pomocą zmiennej $ErrorViewpreferencji .

W przypadku interfejsu ConciseView, jeśli błąd nie pochodzi ze skryptu lub błędu analizatora, jest to pojedynczy wiersz komunikat o błędzie:

Get-Childitem -Path c:\NotReal
Get-ChildItem: can't find path 'C:\NotReal' because it doesn't exist

Jeśli błąd występuje podczas wykonywania skryptu lub jest błędem analizy, program PowerShell zwraca wielowierszowy komunikat o błędzie zawierający błąd, wskaźnik i komunikat o błędzie pokazujący, gdzie błąd znajduje się w tym wierszu. Jeśli terminal nie obsługuje sekwencji ucieczki kolorów ANSI (VT100), kolory nie są wyświetlane.

Wyświetlanie błędu ze skryptu

Widok domyślny w programie PowerShell 7 to ConciseView. Poprzedni widok domyślny to NormalView i można go wybrać, ustawiając zmienną $ErrorViewpreferencji .

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Uwaga

Dodano nową właściwość ErrorAccentColor w celu $Host.PrivateData obsługi zmiany koloru wyróżniającego komunikatu o błędzie.

Nowe polecenie cmdlet Get-Error udostępnia pełny szczegółowy widok w pełni kwalifikowanego błędu w razie potrzeby. Domyślnie polecenie cmdlet wyświetla pełne szczegóły, w tym wyjątki wewnętrzne, ostatniego błędu, który wystąpił.

Wyświetlanie z polecenia Get-Error

Polecenie Get-Error cmdlet obsługuje dane wejściowe z potoku przy użyciu wbudowanej zmiennej $Error. Get-Error wyświetla wszystkie błędy potokowe.

$Error | Get-Error

Polecenie Get-Error cmdlet obsługuje parametr Najnowszy , co pozwala określić liczbę błędów z bieżącej sesji, które chcesz wyświetlić.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Aby uzyskać więcej informacji na temat polecenia Get-Error.

Powiadomienie o nowej wersji

Program PowerShell 7 używa powiadomień o aktualizacji, aby powiadamiać użytkowników o istnieniu aktualizacji programu PowerShell. Raz dziennie program PowerShell wysyła zapytanie do usługi online w celu określenia, czy jest dostępna nowsza wersja.

Uwaga

Sprawdzanie aktualizacji odbywa się podczas pierwszej sesji w danym 24-godzinnym okresie. Ze względu na wydajność sprawdzanie aktualizacji rozpoczyna się 3 sekundy po rozpoczęciu sesji. Powiadomienie jest wyświetlane tylko na początku kolejnych sesji.

Domyślnie program PowerShell subskrybuje jeden z dwóch różnych kanałów powiadomień w zależności od wersji/gałęzi. Obsługiwane, ogólnie dostępne wersje programu PowerShell zwracają tylko powiadomienia dotyczące zaktualizowanych wersji ogólnie dostępnych. Wersje wersji zapoznawczej i Release Candidate (RC) powiadamiają o aktualizacjach wersji zapoznawczych, RC i GA.

Zachowanie powiadomień o aktualizacji można zmienić przy użyciu zmiennej środowiskowej $Env:POWERSHELL_UPDATECHECK . Obsługiwane są następujące wartości:

  • Wartość domyślna jest taka sama jak niezdefiniowania $Env:POWERSHELL_UPDATECHECK
    • Ogólnie dostępne wersje powiadamiają o aktualizacjach wersji ogólnie dostępnej
    • Wersje zapoznawcza/RC powiadamiają o aktualizacjach wersji ogólnie dostępnej i zapoznawczej
  • Wyłączone powoduje wyłączenie funkcji powiadamiania o aktualizacji
  • LtS powiadamia tylko o aktualizacjach wersji ogólnodostępnych z obsługą długoterminową (LTS)

Uwaga

Zmienna środowiskowa $Env:POWERSHELL_UPDATECHECK nie istnieje, dopóki nie zostanie ustawiona po raz pierwszy.

Aby ustawić tylko powiadomienie o wersji dla LTS wersji:

$Env:POWERSHELL_UPDATECHECK = 'LTS'

Aby ustawić powiadomienie o wersji na Default zachowanie:

$Env:POWERSHELL_UPDATECHECK = 'Default'

Aby uzyskać więcej informacji o powiadomieniach o aktualizacji.

Obsługa nowych zasobów DSC przy użyciu Invoke-DSCResource (eksperymentalna)

Uwaga

Jest to funkcja eksperymentalna o nazwie PSDesiredStateConfiguration.InvokeDscResource. Aby uzyskać więcej informacji, zobacz Korzystanie z funkcji eksperymentalnych.

Polecenie Invoke-DscResource cmdlet uruchamia metodę określonego zasobu Desired State Configuration programu PowerShell (DSC).

To polecenie cmdlet wywołuje bezpośrednio zasób DSC bez tworzenia dokumentu konfiguracji. Za pomocą tego polecenia cmdlet produkty do zarządzania konfiguracją mogą zarządzać systemem Windows lub Linux przy użyciu zasobów DSC. To polecenie cmdlet umożliwia również debugowanie zasobów, gdy aparat DSC jest uruchomiony z włączonym debugowaniem.

To polecenie wywołuje metodę Set zasobu o nazwie WindowsProcess i udostępnia obowiązkowe właściwości Ścieżka i Argumenty , aby uruchomić określony proces systemu Windows.

Invoke-DscResource -Name WindowsProcess -Method Set -ModuleName PSDesiredStateConfiguration -Property @{
  Path = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  Arguments = ''
}

Aby uzyskać więcej informacji na temat invoke-DSCResource.

Istotne zmiany i ulepszenia

Zmiany powodujące niezgodność

  • Obsługa powiadomień o aktualizacji LTS i kanałów domyślnych (#11132)
  • Zaktualizuj Test-Connection, aby działały bardziej jak w Windows PowerShell (#10697) (Dzięki@vexx32!)
  • Zachowaj $? dla ParenExpression, SubExpression i ArrayExpression (#11040)
  • Ustaw katalog roboczy na bieżący katalog w Start-Job (#10920) (dziękujemy) @iSazonov!)
  • Wprowadź $PSCulture konsekwentnie odzwierciedlać zmiany w kulturze sesji (#10138) (Dzięki @iSazonov!)

Aktualizacje aparatu i poprawki

  • Ulepszenia interfejsów API punktu przerwania dla scenariuszy zdalnych (#11312)
  • Naprawiono wyciek definicji klasy programu PowerShell do innej przestrzeni uruchomieniowej (#11273)
  • Naprawiono regresję w formatowaniu spowodowanym przez element pierwotny FirstOrDefault dodany w wersji 7.0.0-Preview1 (#11258)
  • Dodatkowe moduły firmy Microsoft do śledzenia w telemetrii PS7 (#10751)
  • Make approved features non-experimental (#11303) (Make approved features non-experimental (#11303)
  • Aktualizacja obiektu ConciseView do używania obiektu TargetObject, jeśli ma zastosowanie (#11075)
  • Naprawiono wyjątek NullReferenceException w publicznych metodach CompletionCompleters (#11274)
  • Naprawiono sprawdzanie stanu wątku mieszkania na platformach innych niż Windows (#11301)
  • Aktualizowanie ustawienia PSModulePath w celu połączenia zmiennych środowiskowych procesu i maszyny (#11276)
  • Bump .NET Core to 3.1.0 (#11260)
  • Naprawiono wykrywanie $PSHOME przed $env:PATH (#11141)
  • Zezwalaj programowi pwsh na dziedziczenie $env:PSModulePath i włącz poprawne uruchamianie powershell.exe (#11057)
  • Przejście do platformy .NET Core 3.1 (wersja zapoznawcza 1) (#10798)
  • Refaktoryzacja kontroli tagów ponownej analizy w dostawcy systemu plików (#10431) (dzięki @iSazonov!)
  • Zastąp znak CR i nowy wiersz znakiem 0x23CE w rejestrowaniu skryptów (#10616)
  • Naprawienie wycieku zasobu przez wyrejestrowanie programu obsługi zdarzeń z elementu AppDomain.CurrentDomain.ProcessExit (#10626)
  • Dodano obsługę elementu ActionPreference.Break, aby włamać się do debugera, gdy są generowane komunikaty debugowania, błędu, informacji, postępu, pełnej lub ostrzeżenia (#8205) (Dzięki @KirkMunro!)
  • Włącz uruchamianie dodatków panelu sterowania w programie PowerShell bez określania rozszerzenia .CPL. (#9828)
  • Obsługa liczb ujemnych w operatorze -split (#8960) (Dzięki @ece-jacob-scott!)

Ogólne Aktualizacje poleceń cmdlet i poprawki

  • Poprawka dotycząca problemu w raspbian, aby ustawić datę zmian plików w funkcji eksperymentalnej UnixStat (#11313)
  • Dodaj -AsPlainText do ConvertFrom-SecureString (#11142)
  • Dodano sprawdzanie wersji systemu WindowsPS dla narzędzia WinCompat (#11148)
  • Rozwiązywanie problemów z raportowaniem błędów w niektórych scenariuszach WinCompat (#11259)
  • Dodawanie natywnego narzędzia rozpoznawania binarnego (#11032) (dzięki @iSazonov!)
  • Aktualizowanie obliczeń szerokości znaków w celu poprawnego przestrzegania znaków CJK (#11262)
  • Dodawanie Unblock-File dla systemu macOS (#11137)
  • Naprawiono regresję w Get-PSCallStack (#11210) (dziękujemy) @iSazonov!)
  • Usuń automatyczne ładowanie modułu ScheduledJob podczas korzystania z poleceń cmdlet zadania (#11194)
  • Dodaj parametr OutputType do polecenia cmdlet Get-Error i zachowaj oryginalne nazwy typów (#10856)
  • Naprawiono odwołanie o wartości null we właściwości SupportsVirtualTerminal (#11105)
  • Dodawanie ewidencjonu limitu w Get-WinEvent (#10648) (Dzięki @iSazonov!)
  • Naprawiono środowisko uruchomieniowe poleceń, aby stopUpstreamCommandsException nie było wypełniane w parametrze -ErrorVariable (#10840)
  • Ustaw kodowanie wyjściowe na [Console]::OutputEncoding dla poleceń natywnych (#10824)
  • Obsługa bloków kodu wielowierszowego w przykładach (#10776) (Dzięki @Greg-Smulko!)
  • Dodaj parametr Culture do polecenia cmdlet Select-String (#10943) (Dziękujemy) @iSazonov!)
  • Naprawiono ścieżkę katalogu roboczego Start-Job z ukośnikiem odwrotnym (#11041)
  • ConvertFrom-Json: Odpakuj kolekcje domyślnie (#10861) (Dzięki @danstur!)
  • Użyj tabeli skrótów uwzględniającej wielkość liter dla polecenia cmdlet Group-Object z przełącznikami -CaseSensitive i -AsHashtable (#11030) (Dzięki @vexx32!)
  • Obsługa wyjątku, jeśli wyliczanie plików kończy się niepowodzeniem podczas ponownego kompilowania ścieżki, aby mieć poprawną wielkość liter (#11014)
  • Naprawiono polecenie ConciseView, aby pokazać działanie zamiast polecenia myCommand (#11007)
  • Zezwalaj na ignorowanie stanu błędów HTTP (#10466) (Dzięki) polecenia cmdlet sieci Web @vdamewood!)
  • Napraw potokowanie więcej niż jednego poleceniaInfo do Get-Command (#10929)
  • Dodawanie polecenia cmdlet Get-Counter z powrotem dla systemu Windows (#10933)
  • Ustaw ConvertTo-Json traktować [AutomationNull]::Value i [NullString]::Value jako $null (#10957)
  • Usuwanie nawiasów z adresu ipv6 dla komunikacji wirtualnej SSH (#10968)
  • Napraw awarię, jeśli polecenie wysłane do programu pwsh jest po prostu odstępem (#10977)
  • Dodano międzyplatformowe Get-Clipboard i Set-Clipboard (#10340)
  • Naprawa ustawienia oryginalnej ścieżki obiektu systemu plików, aby nie mieć dodatkowego ukośnika końcowego (#10959)
  • Obsługa $null dla ConvertTo-Json (#10947)
  • Dodaj polecenie Out-Printer z powrotem w systemie Windows (#10906)
  • Poprawka Start-Job -WorkingDirectory z białym znakiem (#10951)
  • Zwraca wartość domyślną podczas pobierania wartości null dla ustawienia w PSConfiguration.cs (#10963) (Dzięki @iSazonov!)
  • Obsługa wyjątku we/wy jako braku zakończenia (#10950)
  • Dodaj zestaw GraphicalHost, aby włączyć funkcję Out-GridView, Show-Command i Get-Help -ShowWindow (#10899)
  • Take ComputerName via pipeline in Get-HotFix (#10852) (Take ComputerName via pipeline in Get-HotFix (#10852) (Dzięki @kvprasoon!)
  • Poprawiono uzupełnianie kart dla parametrów, tak aby pokazywały typowe parametry jako dostępne (#10850)
  • Napraw polecenie GetCorrectCasedPath(), aby najpierw sprawdzić, czy jakiekolwiek wpisy plików systemowych są zwracane przed wywołaniem funkcji First() (#10930)
  • Ustaw katalog roboczy na bieżący katalog w Start-Job (#10920) (Dzięki @iSazonov!)
  • Zmień wartość TabExpansion2, aby nie wymagać -CursorColumn i traktować ją jako $InputScript.Length (#10849)
  • Obsługa przypadku, w którym host może nie zwracać wierszy lub kolumn ekranu (#10938)
  • Poprawiono użycie kolorów wyróżniających dla hostów, które nie obsługują ich (#10937)
  • Dodaj polecenie Update-List wstecz (#10922)
  • Aktualizowanie identyfikatora FWLink dla Clear-RecycleBin (#10925)
  • Podczas kończenia karty pomiń plik, jeśli nie można odczytać atrybutów pliku (#10910)
  • Dodawanie z powrotem Clear-RecycleBin dla systemu Windows (#10909)
  • Dodaj $env:__SuppressAnsiEscapeSequences , aby kontrolować, czy w danych wyjściowych ma być sekwencja ucieczki VT (#10814)
  • Dodaj parametr -NoEmphasize, aby kolorować dane wyjściowe Select-String (#8963) (Dzięki @derek-xia!)
  • Dodawanie polecenia cmdlet Get-HotFix (#10740)
  • Umożliwianie Add-Type w aplikacjach hostujących program PowerShell (#10587)
  • Użyj bardziej efektywnej kolejności oceny w pliku LanguagePrimitives.IsNullLike() (#10781) (Dzięki @vexx32!)
  • Poprawa obsługi strumieni wejściowych potokowych i potokowych kolekcji mieszanych w Format-Hex (#8674) (Dzięki @vexx32!)
  • Użyj konwersji typu w tabelach skrótów SSHConnection, gdy wartość nie jest zgodna z oczekiwanym typem (#10720) (Dzięki @SeeminglyScience!)
  • Napraw zachowanie Get-Content -ReadCount 0, gdy parametr -TotalCount jest ustawiony (#10749) (Dzięki @eugenesmlv!)
  • Komunikat o błędzie odmowy dostępu w Get-WinEvent (#10639) (Dziękujemy) @iSazonov!)
  • Włącz uzupełnianie kart dla przypisania zmiennych, które są wyliczenia lub typu ograniczone (#10646)
  • Usuń nieużywaną właściwość remotingu SourceLength powodującą problemy z formatowaniem (#10765)
  • Dodaj parametr -Ogranicznik do ConvertFrom-StringData (#10665) (Dzięki @steviecoaster!)
  • Dodaj parametr pozycyjny scriptBlock podczas używania Invoke-Command za pomocą protokołu SSH (#10721) (Dzięki @machgo!)
  • Pokaż informacje kontekstowe wiersza, jeśli wiele wierszy, ale brak nazwy skryptu dla conciseView (#10746)
  • Dodawanie obsługi ścieżek \wsl$\ do dostawcy systemu plików (#10674)
  • Dodaj brakujący tekst tokenu dla tokenu TokenKind.QuestionMark w analizatorze (#10706)
  • Ustaw bieżący katalog roboczy każdego ForEach-Object -Parallel uruchomionego skryptu na tę samą lokalizację co skrypt wywołujący. (#10672)
  • Zastąp api-ms-win-core-file-l1-2-2.dll Kernell32.dll dla interfejsów API FindFirstStreamW i FindNextStreamW (#10680) (Dzięki @iSazonov!)
  • Dostosuj skrypt formatowania pomocy, aby był bardziej odporny na tryb StrictMode (#10563)
  • Dodaj parametr -SecurityDescriptorSDDL do New-Service (#10483) (Dzięki @kvprasoon!)
  • Usuń dane wyjściowe informacyjne, skonsoliduj użycie polecenia ping w Test-Connection (#10478) (Dzięki @vexx32!)
  • Odczytywanie specjalnych punktów ponownej analizy bez uzyskiwania do nich dostępu (#10662) (Dzięki @iSazonov!)
  • Bezpośrednie Clear-Host wyjściowe do terminalu (#10681) (Dzięki @iSazonov!)
  • Dodaj nową linię do grupowania za pomocą Format-Table i -Property (#10653)
  • Usuń element [ValidateNotNullOrEmpty] z obiektu -InputObject na Get-Random, aby zezwolić na pusty ciąg (#10644)
  • Wprowadź sugestię algorytmu odległości ciągu systemowego bez uwzględniania wielkości liter (#10549) (Dzięki @iSazonov!)
  • Naprawiono wyjątek odwołania o wartości null w ForEach-Object -Równoległe przetwarzanie wejściowe (#10577)
  • Dodawanie definicji zasad grupy programu PowerShell (#10468)
  • Zaktualizuj hosta konsoli, aby obsługiwać sekwencje sterowania XTPUSHSGR/XTPOPSGR VT, które są używane w scenariuszach komposability. (#10208)
  • Dodaj parametr WorkingDirectory do Start-Job (#10324) (Dzięki @davinci26!)
  • Usuń procedurę obsługi zdarzeń, która powodowała błędną replikację zmian punktu przerwania do debugera przestrzeni uruchamiania hosta (#10503) (Dzięki @KirkMunro!)
  • Zastąp api-ms-win-core-job-12-1-0.dll Kernell32.dll w elemencie Microsoft.PowerShell.Commands.NativeMethods P/Invoke API(#10417) (Dzięki @iSazonov!)
  • Napraw nieprawidłowe dane wyjściowe dla New-Service w przypisaniu zmiennych i -OutVariable (#10444) (Dzięki @kvprasoon!)
  • Rozwiązywanie globalnych problemów z narzędziami wokół kodu zakończenia, parametrów wiersza polecenia i ścieżki spacjami (#10461)
  • Naprawiono rekursję w usłudze OneDrive — zmień element FindFirstFileEx() na użycie typu SafeFindHandle (#10405)
  • Pomiń automatyczne ładowanie elementu PSReadLine w systemie Windows, jeśli czytnik zawartości ekranu NVDA jest aktywny (#10385)
  • Zwiększ liczbę wbudowanych wersji modułu programu PowerShell do wersji 7.0.0.0 (#10356)
  • Dodawanie zgłaszania błędu w Add-Type, jeśli typ o tej samej nazwie już istnieje (#9609) (Dzięki @iSazonov!)

Wydajność

  • Unikaj używania zamknięcia w pliku Parser.SaveError (#11006)
  • Ulepszanie buforowania podczas tworzenia nowych wystąpień regex (#10657) (Dzięki @iSazonov!)
  • Ulepszanie przetwarzania wbudowanych danych typu programu PowerShell z typów types.ps1xml, typesV3.ps1xml i GetEvent.types.ps1xml (#10898)
  • Zaktualizuj plik PSConfiguration.ReadValueFromFile, aby przyspieszyć i zwiększyć wydajność pamięci (#10839)
  • Dodawanie drobnych ulepszeń wydajności na potrzeby inicjowania przestrzeni uruchomieniowej (#10569) (Dzięki @iSazonov!)
  • Przyspieszyj ForEach-Object w przypadku najczęściej używanych scenariuszy (#10454) i rozwiąż ForEach-Object —Problem z wydajnością równoległą z wieloma przestrzeniami uruchomieniowymi (#10455)

Oczyszczanie kodu

  • Zmień tekst komentarza i elementu, aby spełniały standardy firmy Microsoft (#11304)
  • Problemy ze stylem oczyszczania w Compiler.cs (#10368) (Dzięki @iSazonov!)
  • Usuń nieużywany konwerter typów dla commaDelimitedStringCollection (#11000) (Dzięki @iSazonov!)
  • Styl oczyszczania w InitialSessionState.cs (#10865) (Dzięki @iSazonov!)
  • Czyszczenie kodu dla klasy PSSession (#11001)
  • Usuń niedziałaną funkcję "run Update-Help from Get-Help when Get-Help run for the first time" feature (#10974)
  • Rozwiązywanie problemów ze stylem (#10998) (Dzięki @iSazonov!)
  • Oczyszczanie: użyj wbudowanego aliasu typu (#10882) (Dzięki @iSazonov!)
  • Usuń nieużywany klucz ustawienia ConsolePrompting i unikaj niepotrzebnego tworzenia ciągów podczas wykonywania zapytania względem ustawienia ExecutionPolicy (#10985)
  • Wyłącz sprawdzanie powiadomień o aktualizacji dla codziennych kompilacji (#10903) (Dzięki @bergmeister!)
  • Przywracanie interfejsu API debugowania utraconego w pliku #10338 (#10808)
  • Usuń odwołanie WorkflowJobSourceAdapter, które nie jest już używane (#10326) (Dzięki @KirkMunro!)
  • Czyszczenie interfejsów COM w kodzie listy skoków przez naprawienie atrybutów PreserveSig (#9899) (Dzięki @weltkante!)
  • Dodaj komentarz opisujący, dlaczego -ia nie jest aliasem dla parametru -InformationAction common (#10703) (Dzięki @KirkMunro!)
  • Zmień nazwę InvokeCommandCmdlet.cs na InvokeExpressionCommand.cs (#10659) (dziękujemy) @kilasuit!)
  • Dodawanie drobnych oczyszczania kodu związanych z powiadomieniami o aktualizacji (#10698)
  • Usuń przestarzałą logikę przepływu pracy ze skryptów konfiguracji komunikacji wirtualnej (#10320) (Dzięki @KirkMunro!)
  • Aktualizowanie formatu pomocy w celu użycia prawidłowego przypadku (#10678) (dziękujemy) @tnieto88!)
  • Czyszczenie problemów ze stylem CodeFactor w przypadku zatwierdzeń w ostatnim miesiącu (#10591) (Dzięki @iSazonov!)
  • Poprawiono literówkę w opisie funkcji eksperymentalnej PSTernaryOperator (#10586) (Dzięki @bergmeister!)
  • Przekonwertuj wartość wyliczenia ActionPreference.Suspend na nieobsługiwany, zastrzeżony stan i usuń ograniczenie dotyczące używania funkcji ActionPreference.Ignore w zmiennych preferencji (#10317) (Dzięki @KirkMunro!)
  • Zastąp<element ArrayList list T> , aby uzyskać bardziej czytelny i niezawodny kod bez zmieniania funkcjonalności (#10333) (Dzięki @iSazonov!)
  • Wprowadź poprawki stylu kodu w poleceniu TestConnectionCommand (#10439) (Dzięki @vexx32!)
  • Oczyszczanie usługi AutomationEngine i usuwanie dodatkowego wywołania metody SetSessionStateDrive (#10416) (Dzięki @iSazonov!)
  • Zmień nazwę domyślnego parametru ParameterSetName z powrotem na Ogranicznik dla ConvertTo-Csv i ConvertFrom-Csv (#10425)

Narzędzia

  • Dodaj ustawienie domyślne dla właściwości SDKToUse, aby kompilować ją w programie VS (#11085)
  • Install-Powershell.ps1: Dodawanie parametru w celu korzystania z instalacji MSI (#10921) (dziękujemy) @MJECloud!)
  • Dodawanie podstawowych przykładów dla install-powershell.ps1 (#10914) (dziękujemy) @kilasuit!)
  • Ustaw Install-PowerShellRemoting.ps1 do obsługi pustego ciągu w parametrze PowerShellHome (#10526) (Dzięki @Orca88!)
  • Przełącz się z /etc/lsb-release do /etc/os-release w install-powershell.sh (#10773) (Dzięki @Himura2la!)
  • Sprawdź pwsh.exe i pwsh w wersji dziennej w systemie Windows (#10738) (Dzięki @centreboard!)
  • Usuń niepotrzebne naciśnięcie w installpsh-osx.sh (#10752)
  • Zaktualizuj install-powershell.ps1, aby sprawdzić, czy jest już zainstalowana kompilacja dzienna (#10489)

Testy

  • Utwórz zawodny test DSC oczekujący (#11131)
  • Naprawiono test stringdata w celu poprawnego sprawdzania poprawności kluczy tabel skrótów (#10810)
  • Zwalnianie modułów testowych (#11061) (podziękowania @iSazonov!)
  • Zwiększ czas między ponowną próbą testowania adresu URL (#11015)
  • Aktualizowanie testów w celu dokładnego opisania akcji testowych. (#10928) (Dzięki @romero126!)
  • Tymczasowe pomijanie niestabilnego testu TestAppDomainProcessExitEvenHandlerNotLeaking (#10827)
  • Utwórz stabilną stabilność testu przeciekającego programu obsługi zdarzeń (#10790)
  • Synchronizacja wielkich liter w języku CI YAML (#10767) (dzięki @RDIL!)
  • Dodawanie testu dla poprawki przecieku programu obsługi zdarzeń (#10768)
  • Dodawanie testu Get-ChildItem (#10507) (podziękowania @iSazonov!)
  • Zastąp niejednoznaczny język testów z przełącznika do parametru w celu uzyskania dokładności (#10666) (Dzięki @romero126!)
  • Dodawanie testu eksperymentalnego do ForEach-Object -Parallel tests (#10354) (Dziękujemy) @KirkMunro!)
  • Testy aktualizacji dla walidacji alpine (#10428)

Ulepszenia kompilacji i pakietów

  • Naprawianie podpisywania pakietów Nuget dla kompilacji pakietu koordynowanego (#11316)
  • Aktualizowanie zależności z Galeria programu PowerShell i NuGet (#11323)
  • Bump Microsoft.ApplicationInsights z 2.11.0 do 2.12.0 (#11305)
  • Bump Microsoft.CodeAnalysis.CSharp z 3.3.1 do 3.4.0 (#11265)
  • pakiety Aktualizacje dla Debiana 10 i 11 (#11236)
  • Włącz tylko funkcje eksperymentalne przed rc (#11162)
  • Aktualizacja minimalnej wersji systemu macOS (#11163)
  • Bump NJsonSchema z 10.0.27 do 10.0.28 (#11170)
  • Aktualizowanie łączy w README.md i metadata.json dla wersji zapoznawczej.5 (#10854)
  • Wybierz pliki testów zgodności należących do programu PowerShell (#10837)
  • Zezwalaj na kompilowanie pakietu msix win7x86. (Wewnętrzny 10515)
  • Zezwalaj na przekazywanie wersji semantycznych do funkcji NormalizeVersion (#11087)
  • Bump .NET Core framework to 3.1-preview.3 (#11079)
  • Bump PSReadLine z 2.0.0-beta5 do 2.0.0-beta6 w /src/Modules (#11078)
  • Bump Newtonsoft.Json z 12.0.2 do 12.0.3 (#11037) (#11038)
  • Dodawanie pakietów Debian 10, 11 i CentOS 8 (#11028)
  • Przekaż plik Json Build-Info przy użyciu pola ReleaseDate (#10986)
  • Bump .NET Core framework to 3.1-preview.2 (#10993)
  • Włączanie kompilacji pakietu MSIX x86 (#10934)
  • Zaktualizuj adres URL skryptu instalacji zestawu DOTNET SDK w pliku build.psm1 (#10927)
  • Bump Markdig.Signed from 0.17.1 to 0.18.0 (#10887)
  • Bump ThreadJob z 2.0.1 do 2.0.2 (#10886)
  • Aktualizowanie modułu manifestu i pakowania AppX w celu zachowania zgodności z wymaganiami sklepu MS Store (#10878)
  • Aktualizacja dokumentacji pakietu dla zestawu POWERShell SDK do wersji zapoznawczej.5 (wewnętrzny 10295)
  • Aktualizacja ThirdPartyNotices.txt (#10834)
  • Bump Microsoft.PowerShell.Native to 7.0.0-preview.3 (#10826)
  • Bump Microsoft.ApplicationInsights z 2.10.0 do 2.11.0 (#10608)
  • Bump NJsonSchema z 10.0.24 do 10.0.27 (#10756)
  • Dodawanie obsługi komputerów MacPorts do systemu kompilacji (#10736) (dzięki @Lucius-Q-User!)
  • Bump PackageManagement z 1.4.4 do 1.4.5 (#10728)
  • Bump NJsonSchema z 10.0.23 do 10.0.24 (#10635)
  • Dodawanie zmiennej środowiskowej w celu odróżnienia telemetrii klienta/serwera w tożsamości usługi zarządzanej (#10612)
  • Bump PSDesiredStateConfiguration z 2.0.3 do 2.0.4 (#10603)
  • Bump Microsoft.CodeAnalysis.CSharp z 3.2.1 do 3.3.1 (#10607)
  • Aktualizacja do .Net Core 3.0 RTM (#10604) (dziękujemy)@bergmeister!)
  • Aktualizowanie pakietu MSIX w celu spełnienia wymagań dotyczących sklepu Windows Store (#10588)
  • Bump PowerShellGet version from 2.2 to 2.2.1 (#10382)
  • Bump PackageManagement w wersji od 1.4.3 do 1.4.4 (#10383)
  • Aktualizacja README.md i metadata.json dla wersji 7.0.0-preview.4 (wewnętrzny 10011)
  • Uaktualnij .Net Core 3.0 z wersji zapoznawczej 9 do WERSJI RC1 (#10552) (Dziękujemy)@bergmeister!)
  • Fix ExperimentalFeature list generation (Internal 9996)
  • Bump PSReadLine w wersji z 2.0.0-beta4 do 2.0.0-beta5 (#10536)
  • Poprawka skryptu kompilacji wydania w celu ustawienia tagu wydania
  • Aktualizacja wersji programu Microsoft.PowerShell.Native do wersji 7.0.0-preview.2 (#10519)
  • Uaktualnianie do wersji zapoznawczej netcoreapp3.0 (#10484) (dziękujemy) @bergmeister!)
  • Upewnij się, że codzienna skoordynowana kompilacja jest codzienną kompilacją (#10464)
  • Aktualizowanie połączonej kompilacji pakietu w celu wydania codziennych kompilacji (#10449)
  • Usuń odwołanie appveyor (#10445) (Dziękujemy) @RDIL!)
  • Bump NJsonSchema version from 10.0.22 to 10.0.23 (#10421)
  • Usuń usunięcie folderu kompilacji linux-x64, ponieważ niektóre zależności dla alpine wymagają go (#10407)

Dokumentacja i zawartość Pomocy

  • Refaktoryzacja dzienników zmian w jednym dzienniku na wydanie (#11165)
  • Naprawianie linków FWLinks dla dokumentów pomocy online programu PowerShell 7 (#11071)
  • Aktualizacja CONTRIBUTING.md (#11096) (podziękowania @mklement0!)
  • Naprawianie linków doc instalacji w README.md (#11083)
  • Dodaje przykłady do skryptu install-powershell.ps1 (#11024) (dzięki @kilasuit!)
  • Poprawka do Select-String nacisku i Import-DscResource w CHANGELOG.md (#10890)
  • Usuń przestarzałe łącze z powershell-beginners-guide.md (#10926)
  • Scal dzienniki zmian stabilnych i obsługi (#10527)
  • Aktualizacja używanej wersji platformy .NET w dokumentacji kompilacji (#10775) (dziękujemy) @Greg-Smulko!)
  • Zamień łącza z MSDN na microsoft Learn w powershell-beginners-guide.md (#10778) (Dziękujemy) @iSazonov!)
  • Naprawa uszkodzonego linku przeglądu DSC (#10702)
  • Zaktualizuj plik Support_Question.md, aby połączyć się z witryną Stack Overflow jako inny zasób społeczności (#10638) (Dzięki @mklement0!)
  • Dodawanie architektury procesora do szablonu żądania dystrybucji (#10661)
  • Dodawanie nowej książki MoL programu PowerShell do uczenia się dokumentów programu PowerShell (#10602)
  • Aktualizacja README.md i metadanych dla wersji 6.1.6 i 6.2.3 (#10523)
  • Poprawiono literówkę w README.md (#10465) (dziękujemy) @vedhasp!)
  • Dodawanie odwołania do modułu PSKoans do dokumentacji dotyczącej zasobów szkoleniowych (#10369) (dziękujemy) @vexx32!)
  • Aktualizacja README.md i metadata.json dla wersji 7.0.0-preview.3 (#10393)