Sdílet prostřednictvím


Novinky v PowerShellu 7.5

PowerShell 7.5.4 obsahuje následující funkce, aktualizace a zásadní změny. PowerShell 7.5.4 je založený na verzi .NET 9.0.306.

Úplný seznam změn najdete v protokolu CHANGELOG v úložišti GitHub. Další informace o .NET 9 naleznete v tématu Co je nového v .NET 9.

Zásadní změny

  • Opravení -OlderThan a -NewerThan parametrů pro Test-Path při použití PathType a rozsah dat (#20942) (Děkujeme @ArmaanMcleod!))
    • -OlderThan Dříve by bylo ignorováno, pokud je zadáno společně.
  • Změna New-FileCatalog -CatalogVersion výchozího nastavení na 2 (#20428) (Děkujeme@ThomasNieto!)
  • Blokování pomoci ze síťových umístění v relacích omezené komunikace (#20593)
  • Instalační služba systému Windows si teď pamatuje použité možnosti instalace a používá je k inicializaci možností pro další instalaci (#20420) (děkujeme@reduckted!)
  • ConvertTo-Jsonnyní serializuje BigInteger jako číslo (#21000) (Díky@jborean93!)

Aktualizované moduly

PowerShell 7.5.4 obsahuje následující aktualizované moduly:

  • Microsoft.PowerShell.PSResourceGet v1.1.1
  • PSReadLine v2.3.6

Vylepšení dokončování tabulátoru

Mnoho díky @ArmaanMcleod a ostatním za veškerou práci, aby se zlepšilo dokončování tabulátoru.

  • Návrat k odvození typu, pokud nelze načíst hodnotu z bezpečného výrazu klíč-hodnota hashtable (#21184) (Děkujeme @MartinGC94!))
  • Oprava regrese při odvozování typu pro $_ (#21223) (Díky@MartinGC94!)
  • Rozbalit ~ na $HOME ve Windows s dokončováním pomocí tabulátoru (#21529)
  • Nedokončujte při deklarování názvu parametru a člena třídy (#21182) (Děkujeme@MartinGC94!)
  • Zabránit použití záložního dokončení souboru při automatickém dokončování názvů typů pomocí tabulátoru (#20084) (Díky @MartinGC94))
  • Přidejte dokončovač argumentů pro -Version do Set-StrictMode (#20554) (Děkujeme @ArmaanMcleod!))
  • Přidejte -Verb doplňovač argumentů pro Get-Verb/ Get-Command a zrefaktorujte Get-Verb (#20286) (Děkujeme@ArmaanMcleod))
  • Přidat -Verb dokončovač argumentů pro Start-Process (#20415) (Děkujeme @ArmaanMcleod))
  • Přidejte -Scope dokončování argumentů pro příkazy *-Variable, *-Alias a *-PSDrive (#20451) (Děkujeme @ArmaanMcleod))
  • Přidání -Module dokončování pro Save-Help/Update-Help příkazy (#20678) (Děkujeme @ArmaanMcleod))

Nové rutiny

  • Přidejte ConvertTo-CliXml a ConvertFrom-CliXml cmdlety (#21063) (Děkujeme @ArmaanMcleod!)

Vylepšení webových rutin

  • Oprava umožňující spolupráci -PassThru a -Outfile (#24086)
  • Přidat vlastnost OutFile v WebResponseObject (#24047)
  • Zobrazit název souboru v Invoke-WebRequest -OutFile -Verbose (#24041)
  • Oprava WebCmdlets, když je zadáno -Body, ale ContentType není (#23952) (Díky @CarloToso!))
  • Opravit Invoke-WebRequest pro správné nahlášení velikosti, když je zadán -Resume (#20207) (Děkujeme, @LNKLEO!))
  • Oprava webových příkazů, aby WinForm aplikace fungovaly správně (#20606)

Další vylepšení cmdletů

  • Opravte Out-GridView nahrazením zastaralého BinaryFormatter vlastní implementací (#25559)
  • Povolit -NoRestart pracovat s Register-PSSessionConfiguration (#23891)
  • Přidejte možnosti IgnoreComments a AllowTrailingCommas do rutiny Test-Json (#23817) (Děkujeme @ArmaanMcleod!))
  • Get-Help může zobrazovat parametry s atributem ValueFromRemainingArguments jako připojitelné k potrubí (#23871)
  • Změnit typ LineNumber na ulong in Select-String (#24075) (Děkujeme@Snowman-25!)
  • Get-Process: Odstranění požadavku na správce pro -IncludeUserName (#21302) (Děkujeme @jborean93!))
  • Opravit Test-Path -IsValid pro kontrolu neplatných znaků cesty a názvu souboru (#21358)
  • Přidejte RecommendedAction do ConciseView hlášení chyb (#20826) (Díky @JustinGrote!))
  • Přidán indikátor průběhu pro Remove-Item rutinu (#20778) (Děkujeme @ArmaanMcleod!))
  • Oprava Test-Connection kvůli změnám .NET 8 (#20369)
  • Oprava Get-Service chybové zprávy, která se neukončí, aby zahrnovala kategorii (#20276)
  • Přidání parametrů -Empty a -InputObject do New-Guid (#20014) (Děkujeme @CarloToso!))
  • Přidejte alias r k parametru -Recurse u příkazu Get-ChildItem (#20100) (Děkujeme @kilasuit!))
  • Přidejte LP do LiteralPath aliasů pro funkce, u kterých to stále chybí (#20820)
  • Přidat implicitní lokalizaci pomocí náhradní hodnoty pro Import-LocalizedData (#19896). Díky @chrisdent-de!)
  • Přidání Aliases do vlastností zobrazených při formátování obsahu nápovědy parametru vráceného uživatelem Get-Help (#20994)
  • Přidat HelpUri do Remove-Service (#20476)
  • Oprava pádu při dokončování pro poskytovatele SCCM (#20815, #20919, #20915) (děkujeme @MartinGC94!)
  • Oprava regrese v Get-Content případech, kdy -Tail 0 a -Wait jsou použity společně (#20734) (Díky@CarloToso!)
  • OpravitStart-Process -PassThru, aby byla vlastnost ExitCode přístupná pro vrácený Process objekt (#20749) (Děkujeme@CodeCyclone!)
  • Opravte Group-Object tak, aby používal aktuální jazykovou verzi pro svůj výstup (#20608)
  • Oprava Group-Object výstupu pomocí interpolovaných řetězců (#20745) (Děkujeme@mawosoft!)
  • Oprava vykreslení DisplayRoot sítě PSDrive (#20793)
  • Oprava Copy-Item průběhu tak, aby se zobrazoval jako dokončený pouze tehdy, když jsou všechny soubory zkopírovány (#20517)
  • Oprava regrese dokončení cesty UNC (#20419) (Díky@MartinGC94!)
  • Ohlásit chybu, pokud je neplatná -ExecutionPolicy předána do pwsh (#20460)
  • Přidání modulů WinGetCommandNotFound a CompletionPredictor ke sledování využití (#21040)
  • Přidání parametru DateKind do ConvertFrom-Json (#20925) (Děkujeme@jborean93!)
  • Přidání DirectoryInfo do OutputType pro New-Item (#21126) (Díky
  • Oprava Get-Error serializace hodnot pole (#21085) (Díky@jborean93!)
  • Oprava Test-ModuleManifest , aby mohl používat cestu UNC (#24115)
  • Opravit Get-TypeData, aby zapisoval do pipeline okamžitě, místo aby nejprve shromažďoval data (#24236) (Díky @MartinGC94))
  • Přidejte -Force parametr do Resolve-Path a Convert-Path cmdletů pro podporu skrytých souborů pomocí zástupných znaků #20981 (Děkujeme @ArmaanMcleod!)
  • Nastavení standardních popisovačů explicitně při spuštění procesu pomocí -NoNewWindow (#25324)
  • Zpřístupnit chráněné interní zděděné členy instance v oboru třídy. (#25547) (Děkujeme @mawosoft!)
  • Odeberte starý nepřesný návrh a opravte návrh názvu souboru místního skriptu (#25330).
  • Oprava PSMethodInvocationConstraints.GetHashCode metody (#25306) (Díky @crazyjncsu!)

Vylepšení motoru

  • Přesuňte protokolování volání metody .NET až po dokončení potřebného převodu typu pro argumenty metody (#25357)
  • Návrat do AppLockeru po WldpCanExecuteFile (#25305)
  • Explicitně aktivujte a deaktivujte chybovou barvu ANSI (#24065) (Díky@JustinGrote!)
  • Vylepšení definice přetížení .NET obecných metod (#21326) (Díky@jborean93!)
  • += Optimalizace operace pro kolekci, když se jedná o pole objektů (#23901) (děkujeme@jborean93!)
  • Přidání telemetrie pro kontrolu konkrétních značek při importu modulu (#20371)
  • Přidat PSAdapter a ConsoleGuiTools do seznamu povolených pro telemetrii modulu (#20641)
  • Přidání modulu WinGet ke sledování využití (#21040)
  • Při protokolování událostí ETW WDAC (#20910) se ujistěte, že název souboru nemá hodnotu null (děkujeme)@jborean93!)
  • Oprava čtyř regresí zavedených funkcí protokolování WDAC (#20913)
  • Ponechte vstupní, výstupní a chybové popisovače bez nastavení, pokud nejsou přesměrovány (#20853)
  • Oprava implicitních rutin proxy vzdálené komunikace pro zpracování běžných parametrů (#20367)
  • Zahrnout verzi modulu do chybových zpráv, pokud modul nebyl nalezen (#20144) (Děkujeme@ArmaanMcleod!)
  • Opravit unixmode pro zpracování setuid a sticky, když soubor není spustitelný (#20366)
  • Oprava použití sestavení k použití Path.Combine při vytváření cest sestavení (#21169)
  • Ověřte hodnotu použití klíčového slova "namespace" během sémantických kontrol, abyste zabránili deklarování neplatných jmenných prostorů (#21162).
  • Zpracovávejte globální nástroj zvláštním způsobem při přidání $PSHOME na začátek PATH (#24228)

Experimentální funkce

Následující experimentální funkce byly převedeny na hlavní funkce v PowerShellu 7.5-rc.1:

V PowerShellu 7.5-rc.1 jsou zahrnuty následující experimentální funkce:

Vylepšení výkonu

PowerShell 7.5-rc.1 obsahoval PR#23901 z @jborean93, který zlepšuje výkon operace += pro pole objektů.

Následující příklad měří výkon pro různé metody přidání prvků do pole.

$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
}

Při spuštění skriptu v PowerShellu 7.4.6 uvidíte, že použití operátoru += je nejpomalejší metodou.

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

Při spuštění skriptu v PowerShellu 7.5-rc.1 uvidíte, že použití operátoru += je mnohem rychlejší než PowerShell 7.4.6. Teď je to také rychlejší než použití 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