Megosztás a következőn keresztül:


A PowerShell 7.5 újdonságai

A PowerShell 7.5.4 a következő funkciókat, frissítéseket és kompatibilitástörő módosításokat tartalmazza. A PowerShell 7.5.4 a .NET 9.0.306-os kiadásra épül.

A módosítások teljes listáját a GitHub-adattár VÁLTOZÁSNAPLÓjában találja. A .NET 9-ről további információt a .NET 9 újdonságai című témakörben talál.

Kompatibilitástörő változások

  • Javítsa a -OlderThan paramétereket az -NewerThan és Test-Path használatakor a dátumtartomány (PathType) esetén (Köszönjük )
    • Korábban -OlderThan figyelmen kívül maradt, ha együtt voltak megadva
  • Módosítsa New-FileCatalog -CatalogVersion az alapértelmezett értéket 2-re (#20428) (Köszönjük @ThomasNieto!)
  • A korlátozott távoli munkamenetekben a hálózati helyekről érkező segítségnyújtás letiltása (#20593)
  • A Windows telepítője most már emlékszik a használt telepítési beállításokra, és azokkal inicializálja a következő telepítés beállításait (#20420) (Köszönjük @reduckted!)
  • ConvertTo-Json most szerializálja BigInteger számként (#21000) (Köszönöm @jborean93!)

Frissített modulok

A PowerShell 7.5.4 a következő frissített modulokat tartalmazza:

  • Microsoft.PowerShell.PSResourceGet v1.1.1
  • PSReadLine 2.3.6-os verzió

Javítások a tabulátorkiegészítésben

Sok köszönet @ArmaanMcleod és mások minden munkájukért a tabulátor befejezésének javítása érdekében.

  • Amikor a hashtábla kulcs-értéke nem nyerhető ki a biztonságos kifejezésből (#21184), vissza kell térni a típusleképezéshez. (Köszönjük) @MartinGC94!)
  • Javítsa ki a regressziót a ($_) típuskövetkeztetés során (Köszönöm@MartinGC94!)
  • Bővítsd ~ a Windowson tabulátor-kiegészítéssel $HOME (#21529)
  • Ne fejezze be a paraméternév és az osztálytag (#21182) deklarálásakor (Köszönjük @MartinGC94!)
  • A típusnevek (#20084) kiegészítésekor megakadályozzuk a fájl kiegészítésre való visszaesést (Köszönet @MartinGC94)
  • Argumentum-kiegészítő hozzáadása a -VersionSet-StrictMode-hoz: (#20554) (Köszönjük @ArmaanMcleod!)
  • -Verb argumentum-kiegészítő hozzáadása a Get-Verb/ Get-Command-hez és a Get-Verb refaktorálása (#20286) (Köszönjük @ArmaanMcleod))
  • Adja hozzá az -Verb argumentum-kiegészítőt a Start-Process(#20415) számára. Köszönjük @ArmaanMcleod)
  • Argumentum-kiegészítés hozzáadása -Scope a > *-Variable*-Alias parancsokhoz *-PSDrive(#20451) (Köszönet@ArmaanMcleod)
  • Parancsok kiegészítése:-ModuleSave-Help/Update-Help (#20678) (Köszönet @ArmaanMcleod))

Új parancsmagok

  • Parancsmagok hozzáadása ConvertTo-CliXml és ConvertFrom-CliXml (#21063) (Köszönjük @ArmaanMcleod!))

Webes parancsmagok fejlesztései

  • Javítás az -PassThru és -Outfile közötti együttműködés engedélyezésére (#24086)
  • Tulajdonság hozzáadása OutFileWebResponseObject (#24047) alkalmazásban
  • Fájlnév megjelenítése a következőben Invoke-WebRequest -OutFile -Verbose : (#24041)
  • WebCmdlets javítása, ha -Body meg van adva, de ContentType nincs (#23952) (Köszönöm @CarloToso!)
  • Javítsa Invoke-WebRequest úgy, hogy a helyes méret jelentése történjen, amikor -Resume meg van adva (#20207) (Köszönjük, @LNKLEO!))
  • Webparancsmagok javítása az WinForm alkalmazások megfelelő működéséhez (#20606)

Egyéb parancsmagok fejlesztései

  • Out-GridView javítása az elavult BinaryFormatter egyéni megvalósítással történő helyettesítése által (#25559)
  • Engedélyezze, hogy -NoRestart együttműködjön Register-PSSessionConfiguration (#23891)
  • IgnoreComments és AllowTrailingCommas opciók hozzáadása a Test-Json parancshoz (#23817) (Köszönjük @ArmaanMcleod!)
  • Get-Help jelentheti a ValueFromRemainingArguments attribútummal rendelkező paramétereket folyamatba illeszthetőként (#23871)
  • Módosítsa a típust LineNumber-ról ulong-re a Select-String-ben (#24075) (Köszönjük @Snowman-25!))
  • Get-Process: Távolítsa el a (-IncludeUserName) rendszergazdai követelményét (köszönöm@jborean93!)
  • Javítsa ki Test-Path -IsValid érvénytelen elérési útvonal- és fájlnevelemek ellenőrzésére (#21358)
  • Adja hozzá a RecommendedAction a ConciseView hibajelentéshez (#20826) (Köszönjük @JustinGrote!)
  • A parancsmaghoz Remove-Item hozzáadott folyamatjelző sáv (#20778) (Köszönöm @ArmaanMcleod!)
  • Javítás Test-Connection a .NET 8 változásai miatt (#20369)
  • A nem végződő hibaüzenet kijavítása Get-Service a kategória belefoglalásával (#20276)
  • Adja hozzá a -Empty elemhez a -InputObject és New-Guid paramétereket (#20014) (Köszönjük @CarloToso!))
  • Adja hozzá az aliast r a -Recurse parancs paraméteréhez Get-ChildItem (#20100) (Köszönjük@kilasuit!)
  • Adja hozzá a LP-t a LiteralPath aliasokhoz azoknál a függvényeknél, amelyeknél ez még hiányzik (#20820)
  • Implicit lokalizációs visszaesés hozzáadása a Import-LocalizedData elemhez (#19896) (köszönet @chrisdent-de!))
  • A Aliases (Get-Help) által visszaadott paraméter súgótartalmának formázásakor megjelenő tulajdonságokhoz adja hozzá a elemet.
  • Adja hozzá HelpUri a Remove-Service-hoz (#20476)
  • Az SCCM-szolgáltató befejezési összeomlásának javítása (#20815, #20919, #20915) (Köszönjük @MartinGC94!)
  • Regresszió javítása Get-Content amikor a -Tail 0 és -Wait együtt vannak használva (#20734) (Köszönjük @CarloToso!))
  • Javítás Start-Process -PassThru annak biztosításához, hogy a ExitCode tulajdonság elérhető legyen a visszaadott Process objektumhoz (#20749) (Köszönjük @CodeCyclone!)
  • Javítás Group-Object az aktuális kultúra kimenethez való használatához (#20608)
  • Kimenet javítása Group-Object interpolált sztringekkel (#20745) (Köszönettel @mawosoft!)
  • A DisplayRoot renderelésének javítása a PSDrive hálózathoz (#20793)
  • Kijavítottuk Copy-Item a folyamatot, hogy csak az összes fájl másolása után jelenjen meg (#20517)
  • UNC útvonal kiegészítés visszalépésének javítása (#20419) (Köszönjük @MartinGC94!)
  • Jelentsen hibát, ha érvénytelen -ExecutionPolicy kerül átadásra pwsh számára (#20460)
  • WinGetCommandNotFound és CompletionPredictor modulok hozzáadása a használat nyomon követéséhez (#21040)
  • DateKind paraméter hozzáadása a(z) (ConvertFrom-Json) paraméterhez (köszönjük@jborean93!)
  • DirectoryInfo hozzáadása a New-Item kimeneti típusához (#21126) (köszönjük@MartinGC94!)
  • Tömbértékek szerializálásának javítása Get-Error (#21085) (Köszönjük @jborean93!)
  • Javítsa ki Test-ModuleManifest, hogy használhasson egy UNC elérési utat (#24115)
  • Javítás Get-TypeData a folyamatba való azonnali íráshoz az első adatgyűjtés helyett (#24236) (Köszönjük @MartinGC94)
  • Paraméter -Force hozzáadása a Resolve-Path és Convert-Path parancsmagokhoz a helyettesítő karakterekkel ellátott rejtett fájlok támogatásához #20981 (Köszönjük @ArmaanMcleod!))
  • Standard fogópontok explicit beállítása folyamat -NoNewWindow indításakor (#25324)
  • Tegye elérhetővé az örökölt védett belső példánytagokat az osztály hatókörében. (#25547) (Köszönöm @mawosoft!)
  • Távolítsa el a régi homályos javaslatot, és javítsa ki a helyi szkriptfájlnév-javaslatot (#25330)
  • Fix PSMethodInvocationConstraints.GetHashCode metódus (#25306) (Köszönöm @crazyjncsu!)

Motorfejlesztések

  • A .NET metódushívás naplózását helyezze át a szükséges típuskonverzió elvégzése után, amely a metódus argumentumaira vonatkozik (#25357)
  • Visszalépés az AppLockerre WldpCanExecuteFile (#25305)
  • Kifejezetten indítsa el és állítsa le az ANSI hibaszínt (#24065) (Köszönöm @JustinGrote!))
  • Az általános metódusok .NET-túlterhelési definíciójának javítása (#21326) (Köszönjük @jborean93!)
  • A gyűjtemény műveletének += optimalizálása objektumtömb esetén (#23901) (Köszönöm @jborean93!)
  • Telemetria hozzáadása adott címkék kereséséhez modul importálásakor (#20371)
  • A PSAdapter és a ConsoleGuiTools hozzáadása a modulbetöltési telemetria engedélyezési listához (#20641)
  • WinGet-modul hozzáadása a használat nyomon követéséhez (#21040)
  • Győződjön meg arról, hogy a fájlnév nem null értékű a WDAC ETW-események naplózásakor (#20910) (Köszönjük @jborean93!)
  • A WDAC naplózási funkció által bevezetett négy regresszió javítása (#20913)
  • A bemeneti, kimeneti és hiba csatornák ne legyenek megadva, ha nincsenek átirányítva (#20853)
  • Az implicit távirányítási proxi-parancsmagok javítása, hogy a gyakori paraméterekre hathassanak (#20367)
  • Adja meg a modul verzióját a hibaüzenetekben, ha a modul nem található (#20144) (Köszönjük @ArmaanMcleod!)
  • Kijavítva unixmode kezelésére setuid és sticky, amikor a fájl nem végrehajtható (#20366)
  • Javítás a Path.Combine szerelvény használatával a szerelvényútvonalak létrehozásakor (#21169)
  • Ellenőrizze a névtér szemantikai ellenőrzések során való használatának értékét az érvénytelen névterek deklarálásának megakadályozása érdekében (#21162)
  • Kezelje a globális eszközt különösen, amikor $PSHOME elemet ad hozzá a PATH elejére (#24228)

Kísérleti funkciók

A powershell 7.5-rc.1-ben a következő kísérleti funkciók lettek általános funkciókká alakítva:

A PowerShell 7.5-rc.1 a következő kísérleti funkciókat tartalmazza:

Teljesítménybeli fejlesztések

A PowerShell 7.5-rc.1 tartalmazta a PR#23901-et@jborean93, amely javítja a += művelet teljesítményét egy objektumtömb esetében.

Az alábbi példa az elemek tömbhöz való hozzáadásának különböző módszereinek teljesítményét méri.

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

Amikor a szkriptet a PowerShell 7.4.6-ban futtatja, láthatja, hogy a += operátor használata a leglassabb módszer.

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

Amikor a szkriptet a PowerShell 7.5-rc.1-ben futtatja, láthatja, hogy a += operátor használata sokkal gyorsabb, mint a PowerShell 7.4.6. Most már gyorsabb is, mint a List<T>.Add(T) metódus használata.

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