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:

  • Równoległe przetwarzanie potoku 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 (eksperymentalne)

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

Gdzie można zainstalować program PowerShell?

Program PowerShell 7 obsługuje obecnie następujące systemy operacyjne w systemie 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 systemów Debian, Ubuntu i ARM64 Alpine Linux.

Zapoznaj się z instrukcjami instalacji dla 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 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.

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.

Uruchamianie programu PowerShell 7

Program PowerShell 7 instaluje katalog oddzielnie od Windows PowerShell. Dzięki temu można uruchamiać program PowerShell 7 obok siebie z 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 do programu %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 jest zastępowany 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 w celu obsługi wykonywania równoległego. Nowa nazwa pliku wykonywalnego do uruchomienia programu PowerShell 7 to pwsh.exe. Kompilacje w wersji zapoznawczej pozostają w miejscu pwsh-preview zamiast pwsh w katalogu 7-preview.

Ulepszona zgodność z poprzednimi wersjami 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 istniejących modułów 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 w ramach systemu Windows.

W przypadku systemu Windows nowy parametr przełącznika UseWindowsPowerShell jest dodawany do Import-Modulepolecenia . 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 o tym, które moduły Microsoft współpracują 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.

W tym przykładzie pobrano 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 skryptów 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 zmiennej do uruchomionego bloku skryptu.

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

Operatorternary

Program PowerShell 7.0 wprowadzaternary operator, który zachowuje się jak uproszczona if-else instrukcja. Ternary operator programu PowerShell jest ściśle modelowany ze składni operatorów języka C#:

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

Wyrażenie-warunek jest zawsze oceniane 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 wyświetlona .

Aby uzyskać więcej informacji o if.

Operatory łańcucha potoków

Program PowerShell 7 implementuje && operatory i || do warunkowego łańcucha 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 , zsha 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 drugiej strony operator wykonuje potok po prawej stronie, || jeśli potok po lewej stronie nie powiedzie się.

Uwaga

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

W tym miejscu pierwsze polecenie powiedzie się, a drugie polecenie zostanie wykonane:

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

W tym miejscu pierwsze polecenie kończy się niepowodzeniem, 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, przypisanie ??=warunkowe null i operatory ?. dostępu warunkowego o wartości Null i ?[].

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 ocenia 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 po prawej stronie do operandu po lewej stronie tylko wtedy, gdy operand po lewej stronie ma wartość null. Operator ??= nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie ocenia 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 elementu członkowskiego 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 elementów członkowskich, ?.lub dostęp do elementu, do operandu tylko wtedy, ?[]gdy ten operand daje 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 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ć prawidłową 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) (Thanks (Take ComputerName via pipeline in Get-HotFix (#10852) (Take ComputerName @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)
  • Zaktualizuj hosta konsoli, aby obsługiwał sekwencje 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!)
  • Zastąp api-ms-win-core-job-12-1-0.dll Kernell32.dll w Microsoft. PowerShell.Commands.NativeMethods P/Invoke API(#10417) (Dzięki@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 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ę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 do korzystania z instalacji MSI (#10921) (Dzięki @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 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)
  • Aktualizacja minimalnej wersji systemu macOS (#11163)
  • Bump NJsonSchema z 10.0.27 do 10.0.28 (#11170)
  • Aktualizowanie łączy w plikach 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 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 wersji 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 wersji 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)
  • Zaktualizuj 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 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ń linki 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!)
  • Zaktualizuj README.md i metadata.json dla wersji 7.0.0-preview.3 (#10393)