Udostępnij za pośrednictwem


Co nowego w programie PowerShell 7.4

Program PowerShell 7.4.7 zawiera następujące funkcje, aktualizacje i zmiany powodujące problemy z kompatybilnością. Program PowerShell 7.4.7 jest oparty na platformie .NET 8.0.12.

Aby uzyskać pełną listę zmian, zobacz CHANGELOG w repozytorium GitHub.

Zmiany powodujące niezgodność

  • Obrazy Docker Nano Server nie są dostępne w tej wersji
  • Dodano parametr ProgressAction do parametru Common Parameters
  • Zaktualizuj niektóre interfejsy API programu PowerShell, aby zgłaszać ArgumentException zamiast ArgumentNullException, gdy argument jest pustym ciągiem (#19215) (Dziękujemy @xtqqczze!))
  • Usuń kod związany z #requires -pssnapin (#19320)
  • Test-Json teraz używa JsonSchema.NET zamiast Newtonsoft.Json.Schema.
    • Dzięki tej zmianie Test-Json nie obsługuje już starszych schematów Wersji roboczej 4. (#18141) (Dziękujemy @gregsdennis!). Aby uzyskać więcej informacji na temat schematów JSON, zobacz dokumentację schematu JSON. Spowoduje to również przerwanie Test-Json dla plików JSON i JSONC z komentarzami.
    • ConvertFrom-Json obsługa nadal używa biblioteki Newtonsoft.Json.Schema, co pozwala na konwertowanie plików JSON z komentarzami.
  • Dane wyjściowe z Test-Connection zawierają teraz bardziej szczegółowe informacje o testach połączeń TCP
  • Platforma .NET wprowadziła zmiany, które wpłynęły na Test-Connection. Polecenie cmdlet zwraca teraz błąd dotyczący konieczności używania sudo na platformach z systemem Linux podczas korzystania z niestandardowego rozmiaru buforu (#20369)
  • Funkcja eksperymentalna PSNativeCommandPreserveBytePipe jest teraz standardem. Program PowerShell zachowuje teraz dane strumienia bajtów podczas przekierowywania strumienia stdout stdout strumienia natywnego do pliku lub podczas potokowania danych strumienia bajtów do strumienia stdin polecenia natywnego.
  • Zmień sposób obsługi ścieżek względnych podczas korzystania z parametru RelativeBasePath w Resolve-Path (#19755) (Dzięki @MartinGC94!))
  • Usuń nieużywany kod PSv2 — usuwa funkcję TabExpansion (#18337)

Aktualizacje instalatora

Pakiet MSI systemu Windows udostępnia teraz opcję wyłączenia telemetrii programu PowerShell podczas instalacji. Aby uzyskać więcej informacji, zobacz Instalowanie pakietu msi z linii poleceń.

Zaktualizowane wersje PSResourceGet i PSReadLine

PowerShell 7.4 zawiera Microsoft.PowerShell.PSResourceGet w wersji 1.0.1. Ten moduł jest instalowany równolegle z modułem PowerShellGet w wersji 2.2.5 i PackageManagement w wersji 1.4.8.1. Aby uzyskać więcej informacji, zobacz dokumentację Microsoft.PowerShell.PSResourceGet.

Program PowerShell 7.4 zawiera teraz PSReadLine 2.3.4. Aby uzyskać więcej informacji, zobacz dokumentację PSReadLine.

Ulepszenia uzupełniania kart

Bardzo dziękuję @MartinGC94 i innym osobom za ich pracę nad ulepszaniem uzupełniania tabulacji.

  • Naprawiono problem podczas ukończenia pierwszego polecenia w skrypcie z pustym wyrażeniem tablicy (#18355)
  • Naprawiono uzupełnianie argumentu pozycyjnego (#17796)
  • Określanie priorytetów domyślnego zestawu parametrów podczas kończenia argumentów pozycyjnych (#18755)
  • Ulepszanie powiązania pseudo dla parametrów dynamicznych (#18030)
  • Ulepszanie wnioskowania typu kluczy tabeli skrótów (#17907)
  • Naprawiono błąd wnioskowania typu dla pustych instrukcji zwracanych (#18351)
  • Ulepszanie wnioskowania typów dla Get-Random (#18972)
  • Poprawiono wnioskowanie typu dla wszystkich zmiennych zakresu (#18758)
  • Ulepsz wyliczanie wywnioskowanych typów w potoku (#17799)
  • Dodaj uzupełnianie wartości w porównaniach podczas porównywania Enumów (#17654)
  • Dodanie uzupełnienia przypisania właściwości dla enumów (#19178)
  • Naprawiono uzupełnianie właściwości zmiennej PSCustomObject (, #18682,)
  • Poprawiono uzupełnianie składnika w argumencie atrybutu (#17902)
  • Wyklucz nadmiarowe aliasy parametrów z wyników ukończenia (#19382)
  • Naprawiono uzupełnianie składowych klasy dla klas z typami podstawowymi (#19179)
  • Dodawanie uzupełniania dla słów kluczowych 'Using keywords' (#16514)
  • Napraw przeciek zmiennej TabExpansion2 podczas uzupełniania zmiennych (#18763)
  • Włącz uzupełnianie zmiennych w zakresach ScriptBlock (#19819)
  • Naprawiono uzupełnianie zmiennej instrukcji foreach (#19814)
  • Poprawiono pierwszeństwo wnioskowania typu zmiennej (#18691)
  • Naprawiono uzupełnianie składowych dla klasy enum programu PowerShell (#19740)
  • Naprawiono analizowanie literałów tablicowych w wyrażeniach indeksu w wywołaniach metod (#19224)
  • Ulepszanie ukończenia ścieżki (#19489)
  • Naprawiono błąd indeksowania poza zakresem w CompleteInput dla pustego wejścia skryptu (#19501)
  • Zwiększanie wydajności uzupełniania zmiennych (#19595)
  • Poprawa uzupełniania kluczy tabel skrótów dla przypisywania zmiennych z ograniczeniami typów, zagnieżdżonych tabel skrótów i nie tylko (#17660)
  • Interpretacja danych wyjściowych aplikacji zewnętrznych jako ciągów (#19193)
  • Aktualizowanie uzupełniania parametrów dla wyliczeń, aby wykluczyć wartości niedozwolone przez atrybuty ValidateRange (#17750) (Dzięki @fflaten!).
  • Naprawiono uzupełnianie parametrów dynamicznych (#19510)
  • Dodaj uzupełnianie dla zmiennych przypisanych przez polecenie Data (#19831)
  • Popraw rozszerzanie tyldy (~) w systemach Windows do $home, aby zapobiec problemom z używaniem za pomocą rodzimych poleceń (#21529).

Ulepszenia poleceń cmdlet sieci Web

Serdeczne podziękowania @CarloToso i innym za pracę nad ulepszaniem cmdletów sieci Web.

  • Napraw dekompresję w poleceniach cmdlet dotyczących sieci Web, aby dodać obsługę Brotli (#17955) (podziękowania dla @iSazonov!))
  • Webcmdlets dodaje 308 do kodów przekierowania i drobnych poprawek (#18536)
  • Ukończ renderowanie paska postępu w Invoke-WebRequest po zakończeniu lub anulowaniu pobierania (#18130)
  • Polecenia cmdletów sieci Web pobierają interwał po z nagłówków odpowiedzi, jeśli kod stanu wynosi 429 (#18717)
  • Polecenia cmdlet sieci Web ustawiają domyślne kodowanie zestawu znaków na wartość UTF8 (#18219)
  • Zachowaj wartość WebSession.MaximumRedirection przed zmianami (#19190)
  • Polecenie WebCmdlets analizuje deklarację XML, aby uzyskać wartość kodowania, jeśli jest ona obecna. (#18748)
  • Poprawka przy użyciu -Body xml w poleceniach webcmdlets bez kodowania (#19281)
  • Dostosuj zachowanie metody PUT na POST dla domyślnego typu zawartości w WebCmdlets (#19152)
  • Weź pod uwagę atrybut ContentType z nagłówków w WebCmdlets (#19227)
  • Zezwalaj na zachowanie oryginalnej metody HTTP przez dodanie -PreserveHttpMethodOnRedirect do poleceń cmdlet sieci Web (#18894)
  • Polecenia Webcmdlets wyświetlają błąd przy przekierowaniu z https do http (#18595)
  • Dodawanie przełącznika AllowInsecureRedirect do poleceń cmdlet sieci Web (#18546)
  • Popraw rozbudowany komunikat w poleceniach cmdletów sieci Web, gdy długość zawartości jest nieznana (#19252)
  • Skompiluj względny identyfikator URI dla linków z odpowiedzi w Invoke-WebRequest (#19092)
  • Napraw przekierowanie dla -CustomMethod POST w WebCmdlets (#19111)
  • Usuwanie poprzedniej odpowiedzi w usłudze Webcmdlets (#19117)
  • Popraw format błędów XML i JSON Invoke-WebRequest (#18837)
  • Dodawanie parametrów ValidateNotNullOrEmpty do OutFile i InFile parametrów webCmdlets (#19044)
  • HttpKnownHeaderNames aktualizuje listę nagłówków (#18947)
  • Invoke-RestMethod -FollowRelLink naprawić łącza zawierające przecinki (#18829)
  • Napraw usterkę dotyczącą zarządzania przekierowaniem i funkcją KeepAuthorization w cmdlet Web (#18902)
  • Dodawanie StatusCode do HttpResponseException (#18842)
  • Obsługa trwałych połączeń HTTP w poleceniach cmdlet w sieci Web (#19249) (dzięki @stevenebutler!))
  • Małe czyszczenie Invoke-RestMethod (#19490)
  • Popraw szczegółowy komunikat WebCmdlets, aby wyświetlić poprawną wersję protokołu HTTP (#19616)
  • Dodawanie FileNameStar do MultipartFileContent w funkcji WebCmdlets (#19467)
  • Napraw statusy HTTP z 409 na 429 dla WebCmdlets, aby uzyskać interwał ponawiania prób z nagłówka Retry-After. (#19622) (Dzięki @mkht!)
  • Zmień -TimeoutSec na -ConnectionTimeoutSeconds i dodaj -OperationTimeoutSeconds do poleceń cmdlet sieci Web (#19558) (Dzięki @stevenebutler!) inne polecenia cmdlet)
  • Obsługa Ctrl+c podczas zawieszenia się połączenia przy odczytywaniu danych w poleceniach WebCmdlets (#19330) (Dzięki @stevenebutler!))
  • Obsługa gniazda domeny systemu Unix w usłudze WebCmdlets (#19343)

Inne ulepszenia cmdletów

  • Test-Connection teraz zwraca błąd dotyczący konieczności używania sudo na platformach z systemem Linux podczas korzystania z niestandardowego rozmiaru buforu (#20369)
  • Dodaj typy danych wyjściowych do poleceń formatowania (#18746) (Dzięki @MartinGC94!))
  • Dodaj atrybuty typu wyjściowego dla Get-WinEvent (#17948) (Dzięki @MartinGC94!))
  • Dodawanie parametrów i LiteralPath do polecenia cmdlet Test-Json (#19042) (Dzięki @ArmaanMcleod!))
  • Dodawanie parametru NoHeader do poleceń cmdlet ConvertTo-Csv i Export-Csv (#19108) (Dzięki @ArmaanMcleod!)
  • Dodaj parametry Confirm i WhatIf do Stop-Transcript(#18731) (Dzięki @JohnLBevan!)
  • Dodaj parametr FuzzyMinimumDistance do Get-Command (#18261)
  • Parametr kodowania umożliwia użycie kodowania ANSI w programie PowerShell (#19298) (Dzięki @CarloToso!)
  • Dodaj postęp do Copy-Item (#18735)
  • Update-Help teraz zgłasza błąd podczas korzystania z niejawnej kultury w systemach innych niż USA. (#17780) (Dzięki @dkaszews!)
  • Nie wymagaj działania podczas tworzenia ukończonego rekordu postępu (#18474) (Dzięki @MartinGC94!)
  • Nie zezwalaj na ujemne wartości dla parametrów polecenia cmdlet Get-Content, -Head i -Tail (#19715) (Dzięki @CarloToso!))
  • Upewnij się, że Update-Help zgłasza odpowiedni błąd, gdy bieżąca kultura nie jest skojarzona z językiem (#19765) (Podziękowania dla @josea!))
  • Zezwól na łączenie parametrów -Skip i -SkipLast w cmdlet Select-Object. (#18849) (Dzięki @ArmaanMcleod!)
  • Dodaj polecenie cmdlet Get-SecureRandom (#19587)
  • Set-Clipboard -AsOSC52 do zdalnego użycia (#18222) (Dzięki @dkaszews!)
  • Przyspiesz rozpoznawanie ścieżek względnych Resolve-Path (#19171) (Dzięki @MartinGC94!))
  • Dodano parametr przełącznika -CaseInsensitive do poleceń cmdlet Select-Object i Get-Unique (#19683) (Dzięki @ArmaanMcleod!)
  • Restart-Computer i Stop-Computer powinny zgłosić błąd, gdy nie są uruchamiane bez użycia komendy sudo w systemie Unix (#19824)

Ulepszenia silnika

Aktualizacje $PSStyle

  • Dodaje właściwości Dim i DimOff (#18653)
  • Dodano metody statyczne do klasy PSStyle, które mapują wartości ConsoleColor dla pierwszego planu i tła na sekwencje znaków sterujących ANSI (#17938)
  • Nagłówki tabeli dla pól obliczeniowych są domyślnie formatowane kursywą
  • Dodano obsługę poszanowania $PSStyle.OutputRendering na hoście zdalnym (#19601)
  • Zaktualizowane dane telemetryczne w celu uwzględnienia użycia modułów CrescendoBuilt (#20371)

Inne aktualizacje silnika

  • Upewnij się, że klasa programu PowerShell nie jest powiązana z elementem Runspace podczas deklarowania atrybutu NoRunspaceAffinity (#18138)
  • Dodaj atrybut ValidateNotNullOrWhiteSpace (#17191) (Dzięki @wmentha!)
  • Dodaj sqlcmd do listy w celu przekazywania starszych argumentów (#18559)
  • Dodać funkcję cd~ (#18308) (Dzięki @GigaScratch!))
  • Popraw parsowanie typów tablic w typach ogólnych (#19205) (Dzięki @MartinGC94!))
  • Naprawa mask wyrażeń w katalogu głównym ścieżek urządzenia (#19442) (Dzięki @MartinGC94!)
  • Dodaj publiczny interfejs API do pobierania lokalizacji elementów PSModulePath (#19422)
  • Naprawiono niepoprawną konwersję typu ciągu (#19560) (Dzięki @MartinGC94!))
  • Naprawiono powolne działanie, gdy jest używanych wiele punktów przerwania (#14953) (Dzięki @nohwnd!))
  • Usuń kod związany z #requires -pssnapin (#19320)

Funkcje eksperymentalne

Program PowerShell 7.4 wprowadza następujące funkcje eksperymentalne:

  • PSFeedbackProvider — zastępuje ustaloną strukturę sugestii rozszerzalnym dostawcą opinii.
    • Ta funkcja dodaje również właściwości FeedbackName, FeedbackTexti FeedbackAction do $PSStyle.Formatting, które umożliwiają zmianę formatowania komunikatów opinii.
  • PSModuleAutoLoadSkipOfflineFiles — odnajdywanie modułów pomija teraz pliki oznaczone przez dostawców chmury jako nie w pełni na dysku.
  • PSCommandWithArgs — dodaj wsparcie dla przekazywania argumentów do poleceń jako jeden ciąg znaków

Następujące funkcje eksperymentalne stały się głównym nurtem:

Program PowerShell 7.4 zmienił następujące funkcje eksperymentalne:

Aby uzyskać więcej informacji na temat funkcji eksperymentalnych, zobacz Using Experimental Features.