PowerShell 7.4 的新功能
PowerShell 7.4.7 包含下列功能、更新和重大變更。 PowerShell 7.4.7 建置在 .NET 8.0.12 上。
如需變更的完整清單,請參閱 GitHub 存放庫中的 CHANGELOG。
重大變更
- 此版本的 Nano Server Docker 映像不可用。
- 已將 ProgressAction 參數新增至 Common Parameters
- 更新一些 PowerShell API 以在自變數是空字串時擲回 ArgumentException,而不是 ArgumentNullException (#19215) (感謝 @xtqqczze!)
- 移除與
#requires -pssnapin
相關的程式代碼 (#19320) -
Test-Json
現在使用 JsonSchema.NET,而不是 Newtonsoft.Json.Schema。 -
Test-Connection
的輸出現在包含 TCP 連線測試的詳細資訊 - .NET 引進了會影響
Test-Connection
的變更。 Cmdlet 現在會傳回一個錯誤,指出當使用自定義緩衝區大小時,需要在 Linux 平台上使用sudo
(#20369) - 實驗性功能 PSNativeCommandPreserveBytePipe 現在是主流功能。 PowerShell 現在會將原生命令 stdout 數據流重新導向至檔案時,或將位元組數據流數據傳送至原生命令的 stdin 數據流時,保留位元組數據流數據。
- 變更在使用 RelativeBasePath 參數時如何處理
Resolve-Path
中的相對路徑(#19755)(感謝 @MartinGC94!)) - 移除未使用的 PSv2 程式代碼 - 移除 TabExpansion 函式 (#18337)
安裝程式更新
Windows MSI 套件現在提供在安裝期間停用 PowerShell 遙測的選項。 如需詳細資訊,請參閱 從命令行安裝 msi 套件。
已更新的 PSResourceGet 和 PSReadLine 版本
PowerShell 7.4 包含 Microsoft.PowerShell.PSResourceGet v1.0.1。 此模組會與 PowerShellGet v2.2.5 和 PackageManagement v1.4.8.1 並存安裝。 如需詳細資訊,請參閱 Microsoft.PowerShell.PSResourceGet的檔。
PowerShell 7.4 現在包含 PSReadLine v2.3.4。 如需詳細資訊,請參閱 PSReadLine的文件。
Tab 鍵自動完成改善
非常感謝 @MartinGC94 和其他人的努力,改進了 Tab 鍵自動完成功能。
- 修正使用空陣列表示式在腳本中完成第一個命令時的問題(#18355)
- 修正位置參數完成 (#17796)
- 完成位置自變數時設定預設參數的優先順序 (#18755)
- 改善動態參數的虛擬系結 (#18030)
- 改善哈希表索引鍵的類型推斷 (#17907)
- 修正空白傳回語句的類型推斷錯誤 (#18351)
- 改善 Get-Random 的類型推斷 (#18972)
- 修正所有範圍變數的類型推斷 (#18758)
- 改善管線中推斷型別的列舉 (#17799)
- 在比較列舉時,加入對值的自動完成支持(#17654)
- 新增列舉的屬性指派完成 (#19178)
- 修正 PSCustomObject 變數屬性的自動完成功能(#18682)
- 修正屬性引數中的成員完成(#17902)
- 排除完成結果中的備援參數別名 (#19382)
- 修正類別成員在具有基底型別的類別中的完成(#19179)
- 新增「使用關鍵詞」的自動完成功能(#16514)
- 當完成變數時,修正 TabExpansion2 的變數洩露問題 (#18763)
- 啟用在 ScriptBlock 範圍中完成變數(#19819)
- 修正 foreach 語句變數的完成 (#19814)
- 修正變數類型推斷優先順序 (#18691)
- 修正 PowerShell 列舉類別的成員自動完成(#19740)
- 修正方法呼叫中索引表達式中的陣列字面值解析 (#19224)
- 改進完成路徑(#19489)
- 修正 CompleteInput 中因空的腳本輸入導致的索引超出範圍錯誤 (#19501)
- 改善變數完成效能 (#19595)
- 改進雜湊表的鍵完成功能,包括類型約束的變數指定和巢狀雜湊表等(#17660)
- 將外部應用程式輸出推斷為字串 (#19193)
- 更新列舉的參數自動完成功能,以排除
ValidateRange
屬性不允許的值(#17750),感謝 @fflaten!)的貢獻。 - 修正完成動態參數(#19510)
- 為 Data 語句指派的變數新增完成 (#19831)
- 修正在 Windows 系統上的擴展波浪號(
~
)到$home
,以防止原生命令的使用案例中斷(#21529)
Web Cmdlet 的改善
非常感謝 @CarloToso 以及其他人為改進網頁小命令所做的所有工作。
- 修正網頁 Cmdlet 中的解壓縮功能,以包含 Brotli(#17955)(感謝 @iSazonov!))
- Webcmdlet 新增 308 以重新導向狀態碼和小幅調整(#18536)
- 完成或取消下載時,請在 Invoke-WebRequest 顯示進度列 (#18130)。
- 如果狀態代碼為 429(#18717),Web cmdlet 會從響應標頭取得 Retry-After 間隔。
- Web Cmdlet 會將預設字元集編碼設定為 UTF8 (#18219)
- 防止更改 WebSession.MaximumRedirection (#19190)
- 如果存在,WebCmdlet 會剖析 XML 宣告以取得編碼值。 (#18748)
- 修正 webcmdlet 中使用 XML 而沒有指定編碼方式的問題 -Body(#19281)
- 調整 WebCmdlets 中預設內容類型的 PUT 方法行為,使其與 POST 方法行為一致(#19152)
- 考慮 WebCmdlets 內標頭中的 ContentType (#19227)
- 允許將 -PreserveHttpMethodOnRedirect 新增至 Web Cmdlet 來保留原始 HTTP 方法(#18894)
- Webcmdlets 會顯示 HTTPS 到 HTTP 重新導向的錯誤 (#18595)
- 新增 AllowInsecureRedirect 切換至 Web Cmdlet (#18546)
- 當內容長度未知時,改善 Web Cmdlet 中的詳細訊息(#19252)
- 在
Invoke-WebRequest
中建置回應連結的相對 URI (#19092) - 修正 WebCmdlet 中
-CustomMethod POST
的重新導向 (#19111) - 清理 Webcmdlet 中的先前回應 (#19117)
- 改善 xml 和 json 錯誤格式
Invoke-WebRequest
(#18837) - 將 ValidateNotNullOrEmpty 新增至 WebCmdlets 的 OutFile 和 InFile 參數(#19044)。
- HttpKnownHeaderNames 更新標頭列表 (#18947)
-
Invoke-RestMethod -FollowRelLink
修正包含逗號的連結 (#18829) - 修正在 Web Cmdlet 中管理重新導向和 KeepAuthorization 的 Bug (#18902)
- 將 StatusCode 新增至 HttpResponseException (#18842)
- 支援 Web Cmdlet 中的 HTTP 持續性連線 (#19249) (感謝 @stevenebutler!)
- 小清理
Invoke-RestMethod
(#19490) - 改善 WebCmdlets 的詳細訊息,使其顯示正確的 HTTP 版本(#19616)
- 在 WebCmdlets 中將 FileNameStar 新增至 MultipartFileContent (#19467)
- 修正 WebCmdlets 的 HTTP 狀態從 409 到 429,以便從 Retry-After 標頭獲取重試間隔。 (#19622)(感謝 @mkht!)
- 將
-TimeoutSec
變更為-ConnectionTimeoutSeconds
,並將-OperationTimeoutSeconds
新增至 Web 指令 (#19558) (感謝 @stevenebutler!) 其他指令) - 在 WebCmdlet 中讀取資料時,如果連線中斷,支援使用 Ctrl+c (#19330) (感謝 @stevenebutler!)
- 支援 WebCmdlet 中的 Unix 網域套接字 (#19343)
其他 Cmdlet 改進
-
Test-Connection
現在會傳回一個錯誤,指出在使用自定義緩衝區大小時,需要在 Linux 平台上使用sudo
(#20369) - 將輸出類型新增至 Format 命令 (#18746) (感謝 @MartinGC94!)
- 新增
Get-WinEvent
的輸出類型屬性 (#17948) (感謝 @MartinGC94!) - 將 Path 和 LiteralPath 參數新增至
Test-Json
Cmdlet (#19042) (感謝 @ArmaanMcleod!) - 將 NoHeader 參數新增至
ConvertTo-Csv
和Export-Csv
Cmdlet (#19108) (感謝 @ArmaanMcleod!) - 將 確認 和 WhatIf 參數新增至
Stop-Transcript
(#18731)(感謝 @JohnLBevan!)) - 將 FuzzyMinimumDistance 参數新增至
Get-Command
(#18261) - 讓 編碼 參數能夠在 PowerShell 中採用
ANSI
編碼 (#19298) (感謝 @CarloToso!) - 將進度新增至
Copy-Item
(#18735) -
Update-Help
現在會在非美國系統上使用隱含文化特性時回報錯誤。 (#17780)(感謝 @dkaszews!) - 在建立完成進度記錄時,不需要要求活動 (#18474) (感謝 @MartinGC94!))
- 不允許
Get-Content
Cmdlet 參數-Head
和-Tail
的負值(#19715)(感謝 @CarloToso!))。 - 當目前的文化特性與語言無關時,請
Update-Help
擲回適當的錯誤(#19765) (感謝 @josea!) - 允許在
Select-Object
Cmdlet 中結合-Skip
和-SkipLast
參數。 (#18849)(感謝 @ArmaanMcleod!) - 新增
Get-SecureRandom
Cmdlet (#19587) - 遠端使用
Set-Clipboard -AsOSC52
(#18222) (感謝 @dkaszews!) - 加快
Resolve-Path
相對路徑解析(#19171)(感謝 @MartinGC94!)) - 已將 switch 參數
-CaseInsensitive
新增至Select-Object
和Get-Unique
Cmdlet (#19683) (感謝 @ArmaanMcleod!) -
Restart-Computer
和Stop-Computer
在 Unix 上未透過 sudo 執行時應該會出錯(#19824)
引擎改善
$PSStyle
的更新
- 新增 Dim 和 DimOff 属性 (#18653)
- 已將靜態方法新增至 PSStyle 類別,將前景和背景 ConsoleColor 值對應至 ANSI 逸出序列 (#17938)
- 匯出欄位的數據表標頭預設會以斜體格式化
- 新增在遠端主機上尊重
$PSStyle.OutputRendering
的支援 (#19601) - 更新遙測數據以納入
CrescendoBuilt
模組的使用 (#20371)
其他引擎更新
- 宣告
NoRunspaceAffinity
屬性時,讓 PowerShell 類別與 Runspace 無關 (#18138) - 新增
ValidateNotNullOrWhiteSpace
屬性 (#17191) (感謝 @wmentha!) - 將
sqlcmd
新增至傳遞舊版自變數的列表(#18559) - 新增函式
cd~
(#18308) (感謝 @GigaScratch!) - 修正泛型型別中的陣列類型解析(#19205) (感謝 @MartinGC94!))
- 修復裝置路徑根目錄中的通配符(#19442)感謝 @MartinGC94!)
- 新增公用 API 以取得 PSModulePath 元素的位置 (#19422)
- 修正不正確的字串轉換到類型(#19560)(感謝 @MartinGC94!))
- 修正使用許多斷點時執行緩慢的問題 (#14953) (感謝 @nohwnd!))
- 移除與
#requires -pssnapin
相關的程式代碼 (#19320)
實驗性功能
PowerShell 7.4 引進下列實驗性功能:
-
PSFeedbackProvider - 以可延伸的意見反應提供者取代硬式編碼的建議架構。
- 此功能也會將 FeedbackName、FeedbackText和 FeedbackAction 屬性添加至
$PSStyle.Formatting
,讓您變更意見反應訊息的格式。
- 此功能也會將 FeedbackName、FeedbackText和 FeedbackAction 屬性添加至
- PSModuleAutoLoadSkipOfflineFiles - 模組探索現在會略過雲端提供者標示為未完全位於磁碟上的檔案。
- PSCommandWithArgs - 增加支援以單一字串方式將參數傳遞給命令
下列實驗性功能成為主流:
- PSConstrainedAuditLogging
- PSCustomTableHeaderLabelDecoration
- PSNativeCommandErrorActionPreference
- PSNativeCommandPreserveBytePipe
- PSWindows原生命令參數傳遞
PowerShell 7.4 已變更下列實驗性功能:
- PSCommandNotFoundSuggestion - 此功能現在使用可擴展的回饋提供者,而非使用硬編碼的建議(#18726)
如需有關實驗性功能的詳細資訊,請參閱 使用實驗性功能。