共用方式為


PowerShell 7.5 的新功能

PowerShell 7.5.2 包含下列功能、更新和重大變更。 PowerShell 7.5 是以 .NET 9.0.301 版本為基礎。

如需變更的完整清單,請參閱 GitHub 存放庫中的 CHANGELOG 。 如需 .NET 9 的詳細資訊,請參閱 [.NET 9 的新功能][07]。

重大變更

  • 修正 -OlderThan 在使用 -NewerThan 和日期範圍時的 Test-PathPathType 參數(#20942)(感謝 @ArmaanMcleod!))
    • 先前,如果-OlderThan一起指定,這個元素會被忽略。
  • 將預設值變更 New-FileCatalog -CatalogVersion 為 2 (#20428) (感謝 @ThomasNieto!)
  • 封鎖從受限制遠程會話中的網路位置取得協助 (#20593
  • Windows 安裝程式現在會記住所使用的安裝選項,並使用這些選項來初始化下一個安裝的選項 (#20420) (感謝 @reduckted!)
  • ConvertTo-Json 現在串行化 BigInteger 為數位 (#21000) (感謝 @jborean93!)
  • .NET 9 已移除 BinaryFormatter 的實作,導致 Out-GridView cmdlet 中的回歸錯誤。 Out-GridView 的搜尋功能無法在PowerShell 7.5中使用。 此問題會在 問題 #24749 中追蹤。

已更新的模組

PowerShell 7.5.0 包含下列更新的模組:

  • Microsoft.PowerShell.PSResource獲取 v1.1.0
  • PSReadLine 版本 v2.3.6

Tab 鍵自動完成功能的改善

非常感謝 @ArmaanMcleod 和其他人所做的工作,以改進 Tab 鍵自動完成功能。

  • 當無法從安全表達式擷取雜湊表鍵值時,回退至型別推斷(#21184)(感謝 @MartinGC94!)
  • 修正針對$_進行類型推斷時的回歸(#21223) (感謝
  • ~ 擴展至 $HOME 的 Windows 系統上,使用索引標籤自動完成功能(#21529
  • 宣告參數名稱和類別成員時請勿完成 (#21182) (感謝 @MartinGC94!)
  • 防止在按下 Tab 鍵自動完成類型名稱時回退到檔案完成(#20084)(感謝 @MartinGC94))
  • 將參數完成器新增至 -Version 用於 Set-StrictMode#20554)(感謝 @ArmaanMcleod!))
  • 為和 重構新增-Verb自變數完成器Get-Verb/ Get-CommandGet-Verb) (感謝@ArmaanMcleod)
  • -VerbStart-Process) 新增自變數完成器 (感謝@ArmaanMcleod)
  • 新增 -Scope*-Variable*-Alias 命令的*-PSDrive自變數完成器 (#20451) (感謝@ArmaanMcleod)
  • 新增 -Module 命令的完成 Save-Help/Update-Help#20678)(感謝 @ArmaanMcleod)

新的 Cmdlet

  • 新增 ConvertTo-CliXmlConvertFrom-CliXml Cmdlet(#21063)(感謝 @ArmaanMcleod!)

Web Cmdlet 功能改進

  • 修正以允許 -PassThru-Outfile 共同運作 (#24086
  • OutFile中新增WebResponseObject屬性(#24047
  • 顯示 Invoke-WebRequest -OutFile -Verbose 檔案名稱 (#24041
  • 修正指定但不是時 -Body WebCmdlet (#23952ContentType感謝@CarloToso!)
  • 修正 Invoke-WebRequest 以在指定 -Resume 時報告正確的大小(#20207)(感謝 @LNKLEO!))
  • 修正 Web Cmdlet 以允許 WinForm 應用程式正常運作 (#20606

其他 Cmdlet 改善

  • 啟用 -NoRestart 以使用 Register-PSSessionConfiguration#23891
  • 將選項 IgnoreCommentsAllowTrailingCommas 新增至 Test-Json Cmdlet (#23817) (感謝@ArmaanMcleod!)
  • Get-Help 可能會報告屬性為 ValueFromRemainingArguments 管線功能的參數(#23871
  • LineNumber 的類型變更為 ulongSelect-String#24075) (感謝 @Snowman-25!))
  • Get-Process:移除-IncludeUserName的系統管理員需求(#21302),感謝@jborean93!)
  • 修正 Test-Path -IsValid 以檢查無效的路徑和檔案名字符 (#21358
  • 新增 RecommendedActionConciseView 的錯誤報告(#20826)(感謝 @JustinGrote!))
  • 已新增 Cmdlet 的 Remove-Item 進度列 (#20778) (感謝 @ArmaanMcleod!)
  • 因 .NET 8 變更而修正 Test-Connection#20369
  • 修正 Get-Service 非終止錯誤訊息,使其包含類別(#20276
  • 新增-Empty-InputObject參數到New-Guid#20014)(感謝@CarloToso!))
  • 將別名 r 新增至 -Recurse 命令的參數 Get-ChildItem#20100) (感謝 @kilasuit!)
  • LP新增到LiteralPath中仍缺少的函式別名(#20820
  • 將隱含本地化後援新增至 Import-LocalizedData#19896) (感謝 @chrisdent-de!)
  • 當格式化Aliases所傳回參數的協助內容時,將Get-Help新增至協助內容顯示的屬性(#20994)。
  • 新增 HelpUriRemove-Service#20476
  • 修正 SCCM 提供者的崩潰問題(#20815、#20919、#20915)(感謝 @MartinGC94!))
  • 修正當Get-Content-Tail 0一起使用時-Wait的回歸問題(#20734)(感謝@CarloToso!))
  • 修正 Start-Process -PassThru 以確保傳回的 ExitCode 物件的 Process 屬性可以被存取(#20749)(感謝 @CodeCyclone!))
  • 修正 Group-Object 使其輸出符合目前的文化特性(#20608
  • 使用內插字串修正 Group-Object 輸出(參見 #20745)(感謝 @mawosoft!))
  • 修正 DisplayRoot 在網路 PSDrive 的呈現 (#20793
  • 修正 Copy-Item 進度,只在複製所有檔案時顯示已完成 (#20517
  • 修正 UNC 路徑完成回歸 (#20419) (感謝 @MartinGC94!)
  • 傳入無效的 -ExecutionPolicy 時,應向 pwsh 回報錯誤 (#20460
  • 新增 WinGetCommandNotFoundCompletionPredictor 模組以追蹤使用量 (#21040
  • DateKind 參數新增至 ConvertFrom-Json#20925) (感謝 @jborean93!)
  • DirectoryInfo 新增至 New-Item 的 OutputType(#21126) (感謝 @MartinGC94!)
  • 修正 Get-Error 陣列值的串行化 (#21085) (感謝 @jborean93!)
  • 修正 Test-ModuleManifest ,使其可以使用 UNC 路徑 (#24115
  • 修正 Get-TypeData 以立即寫入管線,而不是先收集數據 (#24236) (感謝 @MartinGC94)
  • -Force 參數新增至 Resolve-PathConvert-Path cmdlet 以支援通配符隱藏檔案 #20981 (感謝 @ArmaanMcleod!)
  • 啟動程序時,明確設定標準句柄-NoNewWindow(#25324
  • 讓繼承的受保護內部實例成員可在類別範圍中存取。 (#25547)(感謝 @mawosoft!)
  • 移除舊的模糊建議並修正本機腳本檔名建議 (#25330
  • 修正 PSMethodInvocationConstraints.GetHashCode 方法 (#25306) (感謝 @crazyjncsu!)

引擎改善

  • 在完成方法參數所需的類型轉換後,將 .NET 方法調用記錄移至後面 (#25357)
  • 回退到 AppLocker WldpCanExecuteFile#25305
  • 明確地啟用和停用 ANSI 錯誤色彩(#24065)(特別感謝 @JustinGrote!)
  • 改善泛型方法的 .NET 多載定義 (#21326) (感謝 @jborean93!)
  • 對集合中的+=作業進行優化,當它是一個物件陣列時(#23901)(感謝@jborean93!))
  • 新增遙測以在匯入模組時檢查特定標籤 (#20371
  • 新增PSAdapterConsoleGuiTools 至模組載入遙測允許清單(#20641
  • 新增 WinGet 模組以追蹤使用量 (#21040
  • 記錄 WDAC ETW 事件時,請確定檔名不是 Null (#20910) (感謝 @jborean93!)
  • 修正 WDAC 記錄功能引進的四個回歸 (#20913
  • 當輸入、輸出和錯誤未重新導向時,請保留未設定的輸入、輸出和錯誤句柄 (#20853
  • 修正隱含遠端 Proxy Cmdlet,以針對一般參數進行操作(#20367
  • 找不到模組時,請在錯誤訊息中包含模組版本 (#20144) (感謝 @ArmaanMcleod!)
  • 修正 unixmode,以便在檔案 setuid 不是可執行檔案的情況下處理 sticky(#20366
  • 修正以組件使用 Path.Combine 來建構組件路徑時 (#21169
  • 驗證在語意檢查期間使用命名空間的值,以防止宣告無效的命名空間 (#21162
  • 特別處理將$PSHOME預先加入到PATH的全域工具(#24228

實驗性功能

下列實驗性功能已轉換成 PowerShell 7.5-rc.1 中的主流功能:

PowerShell 7.5-rc.1 包含下列實驗性功能:

效能改善

PowerShell 7.5-rc.1 包含來自 的 @jborean93,這提高了物件數組在進行 += 作業時的效能。

下列範例測量將元素新增至陣列的不同方法的效能。

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

當您在 PowerShell 7.4.6 中執行腳本時,您會看到使用 += 運算子是最慢的方法。

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

當您在 PowerShell 7.5-rc.1 中執行腳本時,您會看到使用 += 運算符比 PowerShell 7.4.6 快得多。 現在,它也比使用 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)