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

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!)
  • Usuwanie automatycznego ładowania 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ękujemy) @iSazonov!)
  • Naprawiono środowisko uruchomieniowe polecenia, aby stopUpstreamCommandsException nie było wypełniane w elemencie -ErrorVariable (#10840)
  • Ustaw kodowanie wyjściowe na [Console]::OutputEncoding dla poleceń natywnych (#10824)
  • Obsługa wielowierszowych bloków kodu w przykładach (#10776) (Dzięki @Greg-Smulko!)
  • Dodaj parametr Culture do polecenia cmdlet Select-String (#10943) (Dziękujemy) @iSazonov!)
  • Poprawka Start-Job ścieżki katalogu roboczego z końcowym ukośnikiem odwrotnym (#11041)
  • ConvertFrom-Json: odpakowywanie kolekcji domyślnie (#10861) (Dzięki @danstur!)
  • Tabela skrótów uwzględniająca 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)
  • Poprawka funkcji ConciseView w celu wyświetlania działania zamiast polecenia myCommand (#11007)
  • Zezwalaj poleceniem cmdlet sieci Web na ignorowanie stanów błędów HTTP (#10466) (Dziękujemy) @vdamewood!)
  • Napraw potokowanie więcej niż jednego polecenia CommandInfo do Get-Command (#10929)
  • Polecenie cmdlet add back Get-Counter dla systemu Windows (#10933)
  • Ustaw ConvertTo-Json traktować [AutomationNull]::Value i [NullString]::Value jako $null (#10957)
  • Usuń nawiasy z adresu ipv6 dla komunikacji wirtualnej SSH (#10968)
  • Naprawa awarii, jeśli polecenie wysyłane do programu pwsh to tylko białe znaki (#10977)
  • Dodano międzyplatformowe Get-Clipboard i Set-Clipboard (#10340)
  • Poprawiono ustawienie oryginalnej ścieżki obiektu systemu plików bez dodatkowego ukośnika końcowego (#10959)
  • Obsługa $null dla ConvertTo-Json (#10947)
  • Dodaj ponownie polecenie Out-Printer 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 pliku PSConfiguration.cs (#10963) (Dzięki @iSazonov!)
  • Obsługa wyjątku we/wy jako niepowodującego zakończenia (#10950)
  • Dodaj zestaw GraphicalHost, aby włączyć element 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 tabulatorów dla parametrów tak, aby było wyświetlane typowe parametry jako dostępne (#10850)
  • Napraw polecenie GetCorrectCasedPath(), aby najpierw sprawdzić, czy jakiekolwiek wpisy plików systemowych są zwracane przed wywołaniem metody First() (#10930)
  • Ustaw katalog roboczy na bieżący katalog w Start-Job (#10920) (dziękujemy) @iSazonov!)
  • Zmień element TabExpansion2, aby nie wymagał parametru -CursorColumn i traktuj go 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 ich nie obsługują (#10937)
  • Dodaj ponownie polecenie Update-List (#10922)
  • Aktualizowanie identyfikatora FWLink dla Clear-RecycleBin (#10925)
  • Podczas uzupełniania 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 element , aby kontrolować, czy sekwencja ucieczki VT ma być w danych wyjściowych (#10814)
  • Dodawanie parametru -NoEmphasize w celu kolorowania danych wyjściowych Select-String (#8963) (Dzięki @derek-xia!)
  • Dodawanie polecenia cmdlet Get-HotFix (#10740)
  • Udostępnij Add-Type w aplikacjach hostujących program PowerShell (#10587)
  • Użyj bardziej efektywnej kolejności oceny w językach LanguagePrimitives.IsNullLike() (#10781) (Dzięki @vexx32!)
  • Ulepszanie obsługi strumieni wejściowych i strumieni wejściowych przesyłanych potokowo w kolekcji mieszanej 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 ustawiono parametr -TotalCount (#10749) (Dziękujemy) @eugenesmlv!)
  • Komunikat o błędzie Odmowy dostępu w Get-WinEvent (#10639) (Dziękujemy) @iSazonov!)
  • Włącz uzupełnianie tabulatorów dla przypisania zmiennej, które jest ograniczone (#10646)
  • Usuń nieużywaną właściwość komunikacji wirtualnej SourceLength powodując problemy z formatowaniem (#10765)
  • Dodaj parametr -Delimiter do ConvertFrom-StringData (#10665) (Dziękujemy) @steviecoaster!)
  • Dodawanie parametru pozycyjnego dla elementu ScriptBlock w przypadku używania Invoke-Command za pomocą protokołu SSH (#10721) (dzięki @machgo!)
  • Pokaż informacje o kontekście wiersza, jeśli wiele wierszy, ale brak nazwy skryptu dla conciseView (#10746)
  • Dodano obsługę ś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 uruchomiony skrypt 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ękujemy) @iSazonov!)
  • Dostosuj skrypt formatowania pomocy, aby był bardziej odporny na tryb StrictMode (#10563)
  • Dodano parametr -SecurityDescriptorSDDL do New-Service (#10483) (Dziękujemy) @kvprasoon!)
  • Usuń informacyjne dane wyjściowe, 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!)
  • Dodawanie nowego wiersza 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)
  • Nie uwzględniaj wielkości liter w algorytmie odległości ciągu systemowego sugestii (#10549) (Dzięki @iSazonov!)
  • Naprawiono wyjątek odwołania o wartości null w ForEach-Object -Równoległe przetwarzanie danych wejściowych (#10577)
  • Dodawanie definicji zasad grupy programu PowerShell (#10468)
  • Aktualizowanie hosta konsoli w celu obsługi sekwencji sterowania XTPUSHSGR/XTPOPSGR VT, które są używane w scenariuszach komposability. (#10208)
  • Dodawanie parametru WorkingDirectory do Start-Job (#10324) (Dziękujemy) @davinci26!)
  • Usuń procedurę obsługi zdarzeń, która powodowała błędną replikację zmian punktu przerwania do debugera obszaru uruchomieniowego hosta (#10503) (Dzięki @KirkMunro!)
  • Zamień api-ms-win-core-job-12-1-0.dll na Kernell32.dll w elemencie Microsoft.PowerShell.Commands.NativeMethods P/Invoke API(#10417) (Dziękujemy) @iSazonov!)
  • Napraw nieprawidłowe dane wyjściowe dla New-Service w przypisaniu zmiennej 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 za pomocą spacji (#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 URZĄDZENIA WUS jest aktywny (#10385)
  • Zwiększ liczbę wbudowanych wersji modułów programu PowerShell do wersji 7.0.0.0 (#10356)
  • Dodaj zgłoszenie 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 analizatorze.SaveError (#11006)
  • Ulepszanie buforowania podczas tworzenia nowych wystąpień wyrażeń regularnych (#10657) (Dzięki @iSazonov!)
  • Ulepszanie przetwarzania danych typu wbudowanego programu PowerShell z typów types.ps1xml, typesV3.ps1xml i GetEvent.types.ps1xml (#10898)
  • Zaktualizuj plik PSConfiguration.ReadValueFromFile, aby był szybszy i bardziej wydajny w pamięci (#10839)
  • Dodawanie drobnych ulepszeń wydajności na potrzeby inicjowania przestrzeni uruchomieniowej (#10569) (dziękujemy) @iSazonov!)
  • Szybsze ForEach-Object w przypadku często używanych scenariuszy (#10454) i rozwiązywanie problemów z wydajnością równoległą ForEach-Object z wieloma obszarami działania (#10455)

Oczyszczanie kodu

  • Zmień tekst komentarza i elementu, aby spełniał standardy firmy Microsoft (#11304)
  • Problemy ze stylem oczyszczania w pliku Compiler.cs (#10368) (Dziękujemy) @iSazonov!)
  • Usuń nieużywany konwerter typów dla CommaDelimitedStringCollection (#11000) (Dzięki @iSazonov!)
  • Styl oczyszczania w pliku 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" (#10974)
  • Rozwiązywanie problemów ze stylem (#10998) (Podziękowania @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 o ustawienie 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!)
  • Oczyszczanie interfejsów COM w kodzie listy szybkiego dostępu przez naprawienie atrybutów PreserveSig (#9899) (Dzięki @weltkante!)
  • Dodaj komentarz opisujący, dlaczego parametr -ia nie jest aliasem parametru -InformationAction (#10703) (Dzięki @KirkMunro!)
  • Zmień nazwę InvokeCommandCmdlet.cs na InvokeExpressionCommand.cs (#10659) (Dzięki @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ęki @tnieto88!)
  • Czyszczenie problemów ze stylem CodeFactor przychodzących 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 elementu ActionPreference.Ignore w zmiennych preferencji (#10317) (Dzięki @KirkMunro!)
  • Zastąp ciąg ArrayList list<T> , aby uzyskać bardziej czytelny i niezawodny kod bez zmiany funkcjonalności (#10333) (Dzięki @iSazonov!)
  • Wprowadzanie poprawek 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 ParametrSetName 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 do korzystania z instalacji MSI (#10921) (Dzięki @MJECloud!)
  • Dodaj podstawowe przykłady dla install-powershell.ps1 (#10914) (Dzięki @kilasuit!)
  • Ustaw Install-PowerShellRemoting.ps1 obsłużyć pusty ciąg 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 codziennej wersji systemu 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 niewiarygodny test DSC oczekujący (#11131)
  • Naprawianie testu stringdata w celu poprawnego sprawdzania poprawności kluczy tabel skrótów (#10810)
  • Zwalnianie modułów testowych (#11061) (Dzięki @iSazonov!)
  • Zwiększ czas między ponowną próbą testowania adresu URL (#11015)
  • Zaktualizuj testy, aby dokładnie opisać akcje testowe. (#10928) (Dzięki @romero126!)
  • Tymczasowe pomijanie flaky test TestAppDomainProcessExitEvenHandlerNotLeaking (#10827)
  • Utwórz stabilną test wycieku procedury obsługi zdarzeń (#10790)
  • Synchronizacja wielkich liter w języku CI YAML (#10767) (Dzięki @RDIL!)
  • Dodawanie testu dla poprawki wycieku procedury obsługi zdarzeń (#10768)
  • Dodawanie testu Get-ChildItem (#10507) (Dzięki @iSazonov!)
  • Zastąp niejednoznaczny język testów z przełącznika do parametru dokładności (#10666) (Dzięki @romero126!)
  • Dodawanie testu eksperymentalnego do ForEach-Object -Równoległe testy (#10354) (Dzięki @KirkMunro!)
  • Testy aktualizacji dla walidacji alpine (#10428)

Ulepszenia kompilacji i pakietów

  • Naprawiono podpisywanie pakietów Nuget dla kompilacji pakietu skoordynowanego (#11316)
  • Aktualizowanie zależności z Galeria programu PowerShell i NuGet (#11323)
  • Bump Microsoft.ApplicationInsights z wersji 2.11.0 do 2.12.0 (#11305)
  • Bump Microsoft.CodeAnalysis.CSharp z wersji 3.3.1 do 3.4.0 (#11265)
  • pakiety Aktualizacje dla Debiana 10 i 11 (#11236)
  • Włącz tylko funkcje eksperymentalne przed rc (#11162)
  • Zaktualizuj minimalną wersję systemu macOS (#11163)
  • Bump NJsonSchema z 10.0.27 do 10.0.28 (#11170)
  • Aktualizowanie łączy w pliku README.md i metadata.json dla wersji Preview.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 do wersji 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 Build-Info Json z polem ReleaseDate (#10986)
  • Bump .NET Core framework do wersji 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 z wersji 0.17.1 do 0.18.0 (#10887)
  • Bump ThreadJob z 2.0.1 do 2.0.2 (#10886)
  • Zaktualizuj moduł manifestu i pakowania AppX, aby był zgodny z wymaganiami sklepu MS Store (#10878)
  • Aktualizowanie dokumentacji pakietu dla zestawu PowerShell SDK do wersji zapoznawczej.5 (wewnętrzny 10295)
  • Aktualizacja ThirdPartyNotices.txt (#10834)
  • Bump Microsoft.PowerShell.Native do wersji 7.0.0-preview.3 (#10826)
  • Bump Microsoft.ApplicationInsights z wersji 2.10.0 do 2.11.0 (#10608)
  • Bump NJsonSchema z 10.0.24 do 10.0.27 (#10756)
  • Dodawanie obsługi interfejsu 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 usłudze MSI (#10612)
  • Bump PSDesiredStateConfiguration z 2.0.3 do 2.0.4 (#10603)
  • Bump Microsoft.CodeAnalysis.CSharp z wersji 3.2.1 do 3.3.1 (#10607)
  • Aktualizacja do .Net Core 3.0 RTM (#10604) (Dzięki@bergmeister!)
  • Aktualizowanie pakietu MSIX tak, aby wersja wymagań sklepu Windows Store (#10588)
  • Bump PowerShellGet w wersji od 2.2 do 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ęki@bergmeister!)
  • Fix ExperimentalFeature list generation (Internal 9996)
  • Bump PSReadLine w wersji od 2.0.0-beta4 do 2.0.0-beta5 (#10536)
  • Naprawianie 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 codziennie koordynowana kompilacja jest kompilacją dzienną (#10464)
  • Aktualizowanie kompilacji połączonego pakietu w celu wydania codziennych kompilacji (#10449)
  • Usuń odwołanie appveyor (#10445) (Dzięki @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 potrzebują 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) (Dzięki @mklement0!)
  • Naprawianie linków dokumentu instalacji w README.md (#11083)
  • Dodaje przykłady do skryptu install-powershell.ps1 (#11024) (Dzięki @kilasuit!)
  • Poprawka do podkreślenia Select-String i Import-DscResource w CHANGELOG.md (#10890)
  • Usuń nieaktualny link z powershell-beginners-guide.md (#10926)
  • Scal dzienniki zmian stabilnej i obsługi (#10527)
  • Aktualizacja używanej wersji platformy .NET w dokumentacji kompilacji (#10775) (Dzięki @Greg-Smulko!)
  • Zastąp łącza z witryny MSDN do usługi Microsoft Learn w powershell-beginners-guide.md (#10778) (Dzięki @iSazonov!)
  • Naprawiono uszkodzony link do przeglądu DSC (#10702)
  • Zaktualizuj plik Support_Question.md, aby połączyć się z usługą 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!)
  • Zaktualizuj README.md i metadata.json dla wersji 7.0.0-preview.3 (#10393)