Udostępnij za pośrednictwem


Co nowego w programie PowerShell 7.5

PowerShell 7.5.0 zawiera następujące funkcje, aktualizacje i zmiany niekompatybilne. Program PowerShell 7.5 jest oparty na wersji ogólnodostępnej .NET 9.0.1.

Aby uzyskać pełną listę zmian, zobacz CHANGELOG w repozytorium GitHub. Aby uzyskać więcej informacji na temat platformy .NET 9, zobacz [Co nowego na platformie .NET 9][07].

Zmiany powodujące niezgodność

  • Poprawka -OlderThan i parametry dotyczące -NewerThan używania Test-Path i PathType zakresu dat (#20942) (Dzięki@ArmaanMcleod!)
    • Poprzednio -OlderThan byłoby ignorowane, jeśli określono razem
  • Zmień New-FileCatalog -CatalogVersion wartość domyślną na 2 (#20428) (Dziękujemy)@ThomasNieto!)
  • Blokuj uzyskiwanie pomocy z lokalizacji sieciowych w sesjach z ograniczeniami komunikacji wirtualnej (#20593)
  • Instalator Windows zapamiętuje teraz używane opcje instalacji i używa ich do inicjowania opcji następnej instalacji (#20420) (Dzięki@reduckted!)
  • ConvertTo-Jsonteraz serializuje BigInteger jako liczbę (#21000) (dzięki@jborean93!)
  • Program .NET 9 usunął implementację BinaryFormatter, powodując regresję w poleceniu cmdlet Out-GridView. Funkcja wyszukiwania Out-GridView nie działa w programie PowerShell 7.5. Ten problem jest śledzony w Problem #24749.

Zaktualizowane moduły

Program PowerShell 7.5.0 zawiera następujące zaktualizowane moduły:

  • Microsoft.PowerShell.PSResourceGet 1.1.0
  • PSReadLine w wersji 2.3.6

Ulepszenia uzupełniania kart

Wiele dzięki @ArmaanMcleod i innym osobom za całą swoją pracę w celu ulepszenia ukończenia karty.

  • Powrót do wnioskowania typu, gdy nie można pobrać wartości klucza tabeli skrótu z bezpiecznego wyrażenia (#21184) (Dzięki@MartinGC94!)
  • Napraw regresję podczas wnioskowania typu dla $_ (#21223) (Dzięki@MartinGC94!)
  • Rozwiń ~ pozycję $home w systemie Windows z uzupełnianiem karty (#21529)
  • Nie należy wykonywać podczas deklarowania nazwy parametru i składowej klasy (#21182) (dzięki@MartinGC94!)
  • Zapobiegaj uzupełnianiu plików podczas kończenia nazw typów na karcie (#20084) (Dziękujemy)@MartinGC94)
  • Dodawanie elementu completer argumentu do -Version elementu dla (Set-StrictMode#20554) (Dziękujemy)@ArmaanMcleod!)
  • Dodawanie -Verb narzędzia do uzupełniania argumentów iGet-Verb/ Get-Commandrefaktoryzacji Get-Verb (#20286) (dzięki@ArmaanMcleod)
  • Dodawanie -Verb elementu completer argumentu dla (Start-Process#20415) (Dziękujemy)@ArmaanMcleod)
  • Dodawanie -Scope modułu uzupełniania argumentów dla *-Variablepoleceń i *-Alias*-PSDrive (#20451) (dziękujemy)@ArmaanMcleod)
  • Dodawanie -Module uzupełniania poleceń Save-Help/Update-Help(#20678) (Dziękujemy@ArmaanMcleod)

Nowe polecenia cmdlet

  • Dodawanie ConvertTo-CliXml poleceń cmdlet i ConvertFrom-CliXml (#21063) (dziękujemy)@ArmaanMcleod!)

Ulepszenia poleceń cmdlet sieci Web

  • Poprawka umożliwiająca współdziałanie -PassThru i -Outfile (#24086)
  • Dodaj właściwość OutFile w WebResponseObject (#24047)
  • Pokaż nazwę pliku w Invoke-WebRequest -OutFile -Verbose (#24041)
  • Napraw polecenie WebCmdlets, gdy -Body jest określony, ale ContentType nie jest (#23952) (dziękujemy)@CarloToso!)
  • Poprawka Invoke-WebRequest do raportowania poprawnego rozmiaru, gdy -Resume jest określony (#20207) (Dzięki@LNKLEO!)
  • Naprawianie poleceń cmdlet sieci Web w celu umożliwienia poprawnej WinForm pracy aplikacji (#20606)

Inne ulepszenia poleceń cmdlet

  • Włącz -NoRestart pracę z Register-PSSessionConfiguration programem (#23891)
  • Dodawanie IgnoreComments poleceń cmdlet (AllowTrailingCommas) i Test-Json opcje (dzięki)@ArmaanMcleod!)
  • Polecenie Get-Help może zgłaszać parametry z atrybutem ValueFromRemainingArguments jako w stanie potoku (#23871)
  • Zmień typ na LineNumberulong w (Select-String#24075) (Dziękujemy@Snowman-25!)
  • Get-Process: Usuń wymaganie administratora dla -IncludeUserName (#21302) (Dziękujemy@jborean93!)
  • Poprawka sprawdzania Test-Path -IsValid nieprawidłowych znaków ścieżki i nazwy pliku (#21358)
  • Dodawanie RecommendedAction do ConciseView raportowania błędów (#20826) (dzięki@JustinGrote!)
  • Dodano pasek postępu dla Remove-Item polecenia cmdlet (#20778) (Dziękujemy)@ArmaanMcleod!)
  • Poprawka Test-Connection spowodowana zmianami platformy .NET 8 (#20369)
  • Naprawianie Get-Service komunikatu o błędzie bez zakończenia w celu uwzględnienia kategorii (#20276)
  • Dodawanie -Empty parametrów i -InputObject do New-Guid (#20014) (Dziękujemy)@CarloToso!)
  • Dodaj alias r do parametru -RecurseGet-ChildItem dla polecenia (#20100) (Dzięki@kilasuit!)
  • Dodaj LP do LiteralPath aliasów dla funkcji, które nadal jej brakuje (#20820)
  • Dodaj niejawną lokalizację rezerwową do Import-LocalizedData (#19896) (Dzięki@chrisdent-de!)
  • Dodaj Aliases do właściwości wyświetlanych podczas formatowania zawartości pomocy parametru zwróconego przez Get-Help (#20994)
  • Dodaj HelpUri do Remove-Service (#20476)
  • Naprawa awarii uzupełniania dostawcy SCCM (#20815, #20919, #20915) (Dziękujemy) @MartinGC94!)
  • Naprawianie regresji w Get-Content przypadku, gdy -Tail 0 i -Wait są używane razem (#20734) (dzięki@CarloToso!)
  • PoprawkaStart-Process -PassThru, aby upewnić się, że ExitCode właściwość jest dostępna dla zwróconego Process obiektu (#20749) (Dzięki@CodeCyclone!)
  • Poprawka Group-Object służąca do używania bieżącej kultury dla danych wyjściowych (#20608)
  • Naprawianie Group-Object danych wyjściowych przy użyciu ciągów interpolowanych (#20745) (dziękujemy)@mawosoft!)
  • Naprawiono renderowanie DisplayRoot elementu dla sieci PSDrive (#20793)
  • Poprawka Copy-Item postępu pokazywania tylko po skopiowaniu wszystkich plików (#20517)
  • Napraw regresję ukończenia ścieżki UNC (#20419) (dzięki@MartinGC94!)
  • Zgłoś błąd, jeśli jest przekazywany nieprawidłowy -ExecutionPolicy do pwsh (#20460)
  • Dodawanie modułów WinGetCommandNotFound i CompletionPredictor w celu śledzenia użycia (#21040)
  • Dodaj parametr DateKind do (ConvertFrom-Json#20925) (Dziękujemy)@jborean93!)
  • Dodawanie informacji o katalogu do parametru OutputType dla nowego elementu (#21126) (dziękujemy)@MartinGC94!)
  • Naprawianie Get-Error serializacji wartości tablicy (#21085) (Dzięki@jborean93!)
  • Poprawka Test-ModuleManifest umożliwiająca używanie ścieżki UNC (#24115)
  • Poprawka Get-TypeData zapisu w potoku natychmiast zamiast zbierania danych najpierw (#24236) (dzięki@MartinGC94)
  • Dodaj -Force parametr do Resolve-Path poleceń cmdlet i Convert-Path , aby obsługiwać ukryte pliki z symbolami wieloznacznymi #20981 (dzięki @ArmaanMcleod!)

Ulepszenia aparatu

  • Jawne uruchamianie i zatrzymywanie koloru błędu ANSI (#24065) (dziękujemy)@JustinGrote!)
  • Ulepszanie definicji przeciążenia platformy .NET metod ogólnych (#21326) (dzięki@jborean93!)
  • Zoptymalizuj operację += dla kolekcji, gdy jest to tablica obiektów (#23901) (Dzięki@jborean93!)
  • Dodawanie telemetrii w celu sprawdzenia określonych tagów podczas importowania modułu (#20371)
  • Dodawanie PSAdapter i ConsoleGuiTools ładowanie do modułu listy dozwolonych danych telemetrycznych (#20641)
  • Dodawanie modułu WinGet w celu śledzenia użycia (#21040)
  • Upewnij się, że nazwa pliku nie ma wartości null podczas rejestrowania zdarzeń WDAC ETW (#20910) (Dzięki@jborean93!)
  • Naprawiono cztery regresje wprowadzone przez funkcję rejestrowania WDAC (#20913)
  • Pozostaw niezastawioną obsługę danych wejściowych, wyjściowych i błędów, gdy nie są przekierowywane (#20853)
  • Napraw niejawne polecenia cmdlet serwera proxy komunikacji wirtualnej, aby działały na typowych parametrach (#20367)
  • Dołącz wersję modułu w komunikatach o błędach, gdy moduł nie zostanie znaleziony (#20144) (dziękujemy)@ArmaanMcleod!)
  • Poprawka unixmode do obsługi setuid i sticky braku pliku wykonywalnego (#20366)
  • Poprawka przy użyciu zestawu do używania metody Path.Combine podczas konstruowania ścieżek zestawów (#21169)
  • Zweryfikuj wartość dla używania przestrzeni nazw podczas kontroli semantycznych, aby zapobiec deklarowaniu nieprawidłowych przestrzeni nazw (#21162)
  • Obsługa narzędzia globalnego specjalnie podczas dołączania $PSHome do ścieżki (#24228)

Funkcje eksperymentalne

Następujące funkcje eksperymentalne zostały przekonwertowane na funkcje podstawowe w programie PowerShell 7.5-rc.1:

W programie PowerShell 7.5-rc.1 znajdują się następujące funkcje eksperymentalne:

Ulepszenia wydajności

Program PowerShell 7.5-rc.1 zawierał żądanie ściągnięcia nr 23901 z @jborean93, który poprawia wydajność operacji += dla tablicy obiektów.

Poniższy przykład mierzy wydajność dla różnych metod dodawania elementów do tablicy.

$tests = @{
    'Direct Assignment' = {
        param($count)

    $result = foreach($i in 1..$count) {
            $i
        }
    }
    'List<T>.Add(T)' = {
        param($count)

        $result = [Collections.Generic.List[int]]::new()
        foreach($i in 1..$count) {
            $result.Add($i)
        }
    }
    'Array+= Operator' = {
        param($count)

        $result = @()
        foreach($i in 1..$count) {
            $result += $i
        }
    }
}

5kb, 10kb | ForEach-Object {
    $groupResult = foreach($test in $tests.GetEnumerator()) {
        $ms = (Measure-Command { & $test.Value -Count $_ }).TotalMilliseconds

        [pscustomobject]@{
            CollectionSize    = $_
            Test              = $test.Key
            TotalMilliseconds = [math]::Round($ms, 2)
        }

        [GC]::Collect()
            [GC]::WaitForPendingFinalizers()
    }

    $groupResult = $groupResult | Sort-Object TotalMilliseconds
        $groupResult | Select-Object *, @{
            Name       = 'RelativeSpeed'
            Expression = {
                $relativeSpeed = $_.TotalMilliseconds / $groupResult[0].TotalMilliseconds
                $speed = [math]::Round($relativeSpeed, 2).ToString() + 'x'
                if ($speed -eq '1x') { $speed } else { $speed + ' slower' }
            }
        } | Format-Table -AutoSize
}

Po uruchomieniu skryptu w programie PowerShell 7.4.6 zobaczysz, że użycie operatora += jest najwolniejszą metodą.

CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
          5120 Direct Assignment                4.17 1x
          5120 List<T>.Add(T)                  90.79 21.77x slower
          5120 Array+= Operator               342.58 82.15x slower


CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
         10240 Direct Assignment                0.64 1x
         10240 List<T>.Add(T)                 184.10 287.66x slower
         10240 Array+= Operator              1668.13 2606.45x slower

Po uruchomieniu skryptu w programie PowerShell 7.5-rc.1 zobaczysz, że użycie operatora += jest znacznie szybsze niż program PowerShell 7.4.6. Teraz jest ona również szybsza niż użycie metody List<T>.Add(T).

CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
          5120 Direct Assignment                4.71 1x
          5120 Array+= Operator                40.42 8.58x slower
          5120 List<T>.Add(T)                  92.17 19.57x slower


CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
         10240 Direct Assignment                1.76 1x
         10240 Array+= Operator               104.73 59.51x slower
         10240 List<T>.Add(T)                 173.00 98.3x slower

[07]: /dotnet/core/whats-new/dotnet-9/overview)