PowerShell 7.5.2 包含下列功能、更新和重大變更。 PowerShell 7.5 是以 .NET 9.0.301 版本為基礎。
如需變更的完整清單,請參閱 GitHub 存放庫中的 CHANGELOG 。 如需 .NET 9 的詳細資訊,請參閱 [.NET 9 的新功能][07]。
重大變更
- 修正
-OlderThan
在使用-NewerThan
和日期範圍時的Test-Path
和PathType
參數(#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-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-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) - 將選項
IgnoreComments
和AllowTrailingCommas
新增至Test-Json
Cmdlet (#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-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)
- 新增
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
[07]: /dotnet/core/whats-new/dotnet-9/overview)