PowerShell 7.5.4 包含下列功能、更新和重大變更。 PowerShell 7.5.4 是以 .NET 9.0.306 版本為基礎。
如需變更的完整清單,請參閱 GitHub 存放庫中的 CHANGELOG 。 如需 .NET 9 的詳細資訊,請參閱 .NET 9 的新功能。
重大變更
- 修正
-OlderThan在使用-NewerThan和日期範圍時的Test-Path和PathType參數(#20942)(感謝 @ArmaanMcleod!))- 先前,如果
-OlderThan一起指定,這個元素會被忽略。
- 先前,如果
- 將預設值變更
New-FileCatalog -CatalogVersion為 2 (#20428) (感謝 @ThomasNieto!) - 封鎖從受限制遠程會話中的網路位置取得協助 (#20593)
- Windows 安裝程式現在會記住所使用的安裝選項,並使用這些選項來初始化下一個安裝的選項 (#20420) (感謝 @reduckted!)
-
ConvertTo-Json現在串行化BigInteger為數位 (#21000) (感謝 @jborean93!)
已更新的模組
PowerShell 7.5.4 包含下列更新的模組:
- Microsoft.PowerShell.PSResourceGet v1.1.1
- 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-Command(Get-Verb) (感謝@ArmaanMcleod) - 為
-Verb(Start-Process) 新增自變數完成器 (感謝@ArmaanMcleod) - 新增
-Scope、*-Variable和*-Alias命令的*-PSDrive自變數完成器 (#20451) (感謝@ArmaanMcleod) - 新增
-Module命令的完成Save-Help/Update-Help(#20678)(感謝 @ArmaanMcleod)
新的 Cmdlet
- 新增
ConvertTo-CliXml和ConvertFrom-CliXmlCmdlet(#21063)(感謝 @ArmaanMcleod!)
Web Cmdlet 功能改進
- 修正以允許
-PassThru並-Outfile共同運作 (#24086) - 在
OutFile中新增WebResponseObject屬性(#24047) - 顯示
Invoke-WebRequest -OutFile -Verbose檔案名稱 (#24041) - 修正指定但不是時
-BodyWebCmdlet (#23952ContentType感謝@CarloToso!) - 修正
Invoke-WebRequest以在指定-Resume時報告正確的大小(#20207)(感謝 @LNKLEO!)) - 修正 Web Cmdlet 以允許
WinForm應用程式正常運作 (#20606)
其他 Cmdlet 改善
- 透過將過時
Out-GridView的使用取代為自訂實作來修正BinaryFormatter(#25559) - 啟用
-NoRestart以使用Register-PSSessionConfiguration(#23891) - 將選項
IgnoreComments和AllowTrailingCommas新增至Test-JsonCmdlet (#23817) (感謝@ArmaanMcleod!) - Get-Help 可能會報告屬性為
ValueFromRemainingArguments管線功能的參數(#23871) - 將
LineNumber的類型變更為ulong在Select-String(#24075) (感謝 @Snowman-25!)) -
Get-Process:移除-IncludeUserName的系統管理員需求(#21302),感謝@jborean93!) - 修正
Test-Path -IsValid以檢查無效的路徑和檔案名字符 (#21358) - 新增
RecommendedAction到ConciseView的錯誤報告(#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)。 - 新增
HelpUri至Remove-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) - 新增 WinGetCommandNotFound 和 CompletionPredictor 模組以追蹤使用量 (#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-Path和Convert-Pathcmdlet 以支援通配符隱藏檔案 #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)
- 新增
PSAdapter和ConsoleGuiTools至模組載入遙測允許清單(#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 包含下列實驗性功能:
- PSRedirectToVariable - 允許重新導向至變數 (#20381)
- PSNativeWindowsTildeExpansion - 為 Windows 原生可執行檔新增磚擴充 (#20402) (感謝 @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json現在將大型列舉視為數字 (#20999) (感謝 @jborean93!)
效能改善
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