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 版本更新安裝程式套件
  • 四個新的實驗性功能和2個升級為主流的實驗性功能
  • 改善可用性的幾項重大變更

如需完整的變更清單,請參閱 GitHub 存放庫中的變更記錄

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 擴充了此實驗性功能,以將 運行 時參數新增至所有 *-PSBreakpoint Cmdlet。 Runspace 參數會指定 Runspace 物件以與所指定 Runspace 中的中斷點互動。
  • PSNativePSPathResolution -這項功能可讓您將 powershell 提供者路徑傳遞至不支援 powershell 路徑語法的原生命令。

  • PSCultureInvariantReplaceOperator -當運算子語句中的左運算元 -replace 不是字串時,該運算元會轉換成字串。 啟用此功能後,轉換不會使用文化特性設定進行字串轉換。

  • PSSubsystemPluginModel 為支援未來預測性 IntelliSense 外掛程式奠定基礎。

中斷性變更和改進

  • 修正 $? $false 原生命令寫入 stderr (#13395)

    原生命令通常會寫入, stderr 而不想要指出失敗。 $? $false 只有當原生命令也有非零的結束代碼時,此變更才會設定為。 這項變更與實驗性功能無關 PSNotApplyErrorActionToStderr

  • $ErrorActionPreference不會影響 stderr 原生命令的輸出 (#13361)

    原生命令通常會寫入, stderr 而不想要指出失敗。 透過這項變更, stderr 仍會在 ErrorRecord 物件中捕捉輸出,但 $ErrorActionPreference 如果 ErrorRecord 來自原生命令,則執行時間不再適用。

  • 重新命名 -FromUnixTime-UnixTimeSeconds on Get-Date 以允許 Unix 時間輸入 (#13084) (感謝 @aetos382 ! )

    -FromUnixTime 參數是在 7.1-preview 期間新增的。2。 參數已重新命名,使其更符合資料類型。 此參數接受整數值,表示自1970年1月1日起,0:00:00 起的秒數。

    此範例會將 Unix 時間 (以 1970-01-01 0:00:00) 到 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"
    }
    

    在先前的行為中 , -Path 因為在引數清單中是第三個引數,所以不會系結 MyPath。 # # 因此它最後會芝至 ' $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
    
  • 將切換參數設 -Qualifier 為非位置,以 Split-Path (#12960) (感謝 @yecril71pl ! )

  • 將工作目錄解析為未指定時的常值路徑 Start-Process (#11946) (感謝 @NoMoreFood ! )

  • -OutFile在 web Cmdlet 中建立參數,以像 -LiteralPath (#11701) (謝謝 @iSazonov ! )

  • 修正數值常值的字串參數系結 BigInteger (#11634) (感謝 @vexx32 ! )

  • 在 Windows 上,會 Start-Process 使用目前會話中的所有環境變數建立一個進程環境,並使用 -UseNewEnvironment 建立新的預設進程環境 (#10830) (謝謝 @iSazonov ! )

  • 將轉換成委派時,請勿將傳回結果換行 PSObject ScriptBlock (#10619)

    ScriptBlock 轉換成要在 c # 內容中使用的委派型別時,將結果包裝在中會 PSObject 帶來不必要的麻煩很快找上門:

    • 當值轉換成委派傳回型別時,基本上會解除 PSObject 包裝。 因此 PSObject 是不需要的。
    • 當委派傳回型別為時 object ,它會包裝在中, PSObject 使其難以在 c # 程式碼中使用。

    在這項變更之後,傳回的物件會是基礎物件。