PowerShell 7.1 的新功能
我們在 2020 年 11 月 11 日 宣佈 正式推出 PowerShell 7.1。 依據 PowerShell 7.0 所建立的基礎,我們將目標專注在社群問題上,並包含了數個改進與修正。 我們致力於確保 PowerShell 能持續成為穩定且高效能的平台。
PowerShell 7.1 包含下列功能、更新和重大變更。
- PSReadLine 2.1.0,其中包含預測性 IntelliSense
- PowerShell 7.1 已發行至 Microsoft Store
- 已針對支援ARM64的新OS版本更新安裝程式套件
- 4 個新的實驗功能和 2 個升級為主流的實驗性功能
- 改善可用性的數項重大變更
如需變更的完整清單,請參閱 GitHub 存放庫中的 CHANGELOG 。
PSReadLine 2.1.0
PowerShell 7.1 也包含 PSReadLine 2.1.0。 此版本包含預測性 IntelliSense。 如需預測性 IntelliSense 功能的詳細資訊,請參閱 PowerShell 部落格中的公告 \(英文\)。
Microsoft Store 安裝程式套件
PowerShell 7.1 已經發佈至 Microsoft Store。 您可以在 Microsoft Store 網站上或 Windows 的 [Store] 應用程式中找到該 PowerShell 版本。
Microsoft Store 套件的優點:
- Windows 內建的自動更新
- 與其他軟體散發機制 (例如 Intune 與 SCCM) 的整合
注意
儲存在 $PSHOME
中的所有系統層級組態設定都無法修改。 這包含 WSMAN 設定。 這會防止遠端工作階段連線到 PowerShell 的 Store 型安裝。 支援使用者層級設定與 SSH 遠端功能。
其他安裝程式
如需更多有關支援的作業系統和支援週期的最新資訊,請參閱 PowerShell 支援週期。
請查看適用於您慣用作業系統的安裝指示:
此外,PowerShell 7.1 支援 Debian、Ubuntu 與 ARM64 Alpine Linux 的 ARM32 和 ARM64 變體。
雖然尚未正式支援,但該社群也會提供適用於 Arch 和 Kali Linux 的套件。
注意
Debian 10+、CentOS 8+、Ubuntu 20.04、Alpine 與 Arm 目前不支援 WinRM 遠端處理。 如需設定 SSH 型遠端處理的詳細資訊,請參閱透過 SSH 的 PowerShell 遠端處理。
實驗性功能
如需實驗性功能的詳細資訊,請參閱使用實驗性功能。
下列實驗性功能現在是此版本中的主要功能:
此版本中新增了下列實驗性功能:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1 會擴充此實驗性功能,以將 Runspace 參數新增至所有
*-PSBreakpoint
Cmdlet。 Runspace 參數會指定 Runspace 物件以與所指定 Runspace 中的中斷點互動。
- PowerShell 7.1 會擴充此實驗性功能,以將 Runspace 參數新增至所有
PSNativePSPathResolution - 此功能可讓您將 PowerShell 提供者路徑傳遞至不支援 PowerShell 路徑語法的原生命令。
PSCultureInvariantReplaceOperator - 當 operator 語句中的
-replace
左側操作數不是字串時,該操作數會轉換成字元串。 啟用此功能后,轉換不會使用文化特性設定進行字串轉換。PSSubsystemPluginModel 是支持未來預測性 IntelliSense 外掛程式的基礎。
中斷性變更和改進
.NET 5.0 中的字串比較行為已變更
PowerShell 7.1 建置在 .NET 5.0 上,引進了下列重大變更:
自 .NET 5.0 起,文化特性不變量字串比較會忽略非列印控制字元。
例如,下列兩個字串會視為相同:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
修正
$?
為當$false
原生命令寫入stderr
(#13395)原生命令通常會寫入,
stderr
而不想要指出失敗。 只有在原生命令也有非零結束代碼時,才會將此變更$?
設定$false
為 。 這項變更與實驗性功能PSNotApplyErrorActionToStderr
無關。$ErrorActionPreference
(#13361) 產生不會影響stderr
原生命令的輸出原生命令通常會寫入,
stderr
而不想要指出失敗。 使用此變更時,stderr
仍會在 ErrorRecord 物件中擷取輸出,但如果 ErrorRecord 來自原生命令,運行時間就不再適用$ErrorActionPreference
。重新命名
-FromUnixTime
為-UnixTimeSeconds
onGet-Date
以允許 Unix 時間輸入 (#13084) (感謝 @aetos382!)參數
-FromUnixTime
已在 7.1-preview.2 期間新增。 參數已重新命名,以更符合數據類型。 此參數會採用整數值,表示自 1970 年 1 月 1 日 0:00:00 起的秒數。本範例會將從 1970-01-01-01 0:00:00) 起的秒數,將 Unix 時間 (轉換成 DateTime。
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
允許明確指定具名參數以取代來自雜湊表展開的相同參數 (#13162)
透過這項變更,展開的具名參數會移至參數清單的結尾,以便系結在所有明確指定的具名參數係結之後。 找不到指定的具名參數時,簡單函式的參數係結不會擲回錯誤。 未知的具名參數會系結至
$args
簡單函式的 參數。 將展開移至自變數清單結尾,會變更參數出現在 中$args
的順序。例如:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
在先前的行為中, MyPath 不會繫結至
-Path
,因為它是自變數清單中的第三個自變數。 ## 因此,最後會填入 '$args' 和Blah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
透過這項變更,自變數會
@hash
移至自變數清單的結尾。 MyPath 會成為清單中的第一個自變數,因此它會系結至-Path
。PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
讓 switch 參數
-Qualifier
不是位置的Split-Path
(#12960) (感謝 @yecril71pl!)將工作目錄解析為
Start-Process
未指定 (#11946) (感謝 @NoMoreFood!)讓
-OutFile
Web Cmdlet 中的參數如-LiteralPath
(#11701) (感謝 @iSazonov!)修正數值常值 (的字串參數
BigInteger
係結 #11634) (感謝 @vexx32!)在 Windows 上,
Start-Process
使用 建立具有目前工作階段中所有環境變數的進程環境,並使用-UseNewEnvironment
建立新的預設進程環境 (#10830) (感謝 @iSazonov!)將
ScriptBlock
轉換成委派 (#10619) 時,請勿將傳回結果PSObject
包裝在ScriptBlock
當 轉換成要用於 C# 內容的委派型別時,將結果包裝在PSObject
中會導致不必要的問題:- 當值轉換成委派傳回型別時,
PSObject
基本上會解除包裝。PSObject
因此不需要 。 - 當委派傳回型別為
object
時,它會包裝在 中PSObject
,使其難以在 C# 程式代碼中使用。
在此變更之後,傳回的物件就是基礎物件。
- 當值轉換成委派傳回型別時,