共用方式為


從 Windows PowerShell 5.1 移轉至 PowerShell 7

PowerShell 7 專為雲端、內部部署和混合式環境所設計,隨附增強功能和 新功能

  • 可與 Windows PowerShell 同時安裝和執行
  • 改善與現有 Windows PowerShell 模組的相容性
  • 新的語言功能,例如三元運算符和 ForEach-Object -Parallel
  • 提升效能
  • 基於 SSH 的遠端操作
  • 跨平臺互作性
  • 支援 Docker 容器

PowerShell 7 與 Windows PowerShell 並存運作,可讓您在部署前輕鬆測試版本並加以比較。 移轉很簡單、快速且安全。

下列 Windows作系統支援 PowerShell 7:

  • Windows 10 和 11
  • Windows Server 2016、2019 和 2022

PowerShell 7 也會在macOS和數個Linux發行版上執行。 如需支援的作系統清單,以及支援生命週期的相關信息,請參閱 PowerShell 支援生命週期

安裝 PowerShell 7

為了彈性和支援 IT、DevOps 工程師和開發人員的需求,有數個選項可供安裝 PowerShell 7。 在大部分情況下,安裝選項可縮減為下列方法:

備註

MSI 套件可以使用管理產品來部署和更新,例如 Microsoft Configuration Manager。 從 GitHub 發布頁面下載套件

部署 MSI 套件需要系統管理員許可權。 ZIP 套件可由任何使用者部署。 ZIP 壓縮檔是安裝 PowerShell 7 以進行測試的最簡單方式,在進行完整安裝前。

您也可以透過 Windows 市集或 winget安裝 PowerShell 7。 如需這兩種方法的詳細資訊,請參閱 在 Windows 上安裝 PowerShell中的詳細指示。

使用 PowerShell 7 與 Windows PowerShell 5.1 並存

PowerShell 7 的設計目的是要與 Windows PowerShell 5.1 共存。 下列功能可確保您對 PowerShell 的投資受到保護,且移轉至 PowerShell 7 很簡單。

  • 個別安裝路徑和可執行檔名稱
  • 分離 PSModulePath
  • 每個版本的個別配置檔
  • 改善的模組相容性
  • 新的遠端端點
  • 群組原則支援
  • 個別事件記錄檔

.NET 版本的差異

PowerShell 7.4 建置在 .NET 8.0 上。 Windows PowerShell 5.1 建置在 .NET Framework 4.x 上。 .NET 版本之間的差異可能會影響腳本的行為,特別是當您直接呼叫 .NET 方法時。 如需詳細資訊,Windows PowerShell 5.1 與 PowerShell 7.x之間的差異。

個別安裝路徑和可執行檔名稱

PowerShell 7 會安裝到新的目錄,使其可以與 Windows PowerShell 5.1 並存執行。

各版本的安裝位置:

  • Windows PowerShell 5.1:$Env:windir\System32\WindowsPowerShell\v1.0
  • PowerShell 6.x:$Env:ProgramFiles\PowerShell\6
  • PowerShell 7:$Env:ProgramFiles\PowerShell\7

新的位置會新增至您的PATH,讓您執行 Windows PowerShell 5.1 和 PowerShell 7。 如果您要從 PowerShell 6.x 移轉至 PowerShell 7,則會移除 PowerShell 6 並取代 PATH。

在 Windows PowerShell 中,PowerShell 可執行檔的名稱為 powershell.exe。 在 6 版和更新版本中,可執行檔案名為 pwsh.exe。 新的名稱可讓您輕鬆地支援這兩個版本的並存執行。

個別 PSModulePath

根據預設,Windows PowerShell 與 PowerShell 7 會在不同的位置儲存模組。 PowerShell 7 會將那些位置合併到 $Env:PSModulePath 環境變數中。 依名稱匯入模組時,PowerShell 會檢查 $Env:PSModulePath所指定的位置。 這可讓 PowerShell 7 同時載入 Core 和 Desktop 模組。

安裝範圍 Windows PowerShell 5.1 PowerShell 7.0
PowerShell 模組 $Env:windir\system32\WindowsPowerShell\v1.0\Modules $Env:ProgramFiles\PowerShell\7\Modules
使用者已安裝
AllUsers 範圍
$Env:ProgramFiles\WindowsPowerShell\Modules $Env:ProgramFiles\PowerShell\Modules
使用者已安裝
CurrentUser 範圍
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

下列範例顯示每個版本的 $Env:PSModulePath 預設值。

  • 適用於 Windows PowerShell 5.1:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    
  • 針對 PowerShell 7:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\PowerShell\Modules
    C:\Program Files\PowerShell\Modules
    C:\Program Files\PowerShell\7\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    

請注意,PowerShell 7 包含 Windows PowerShell 路徑和 PowerShell 7 路徑,以提供模組的自動載入。

備註

如果您已變更 PSModulePath 環境變數或已安裝的自訂模組或應用程式,可能會有其他路徑。

如需詳細資訊,請參閱 about_PSModulePath

如需模組的詳細資訊,請參閱 about_Modules

個別配置檔

PowerShell 配置檔是 PowerShell 啟動時執行的腳本。 此腳本會藉由新增命令、別名、函式、變數、模組和 PowerShell 磁碟驅動器,來自定義您的環境。 設定檔腳本可讓每個會話使用這些自訂設定,而不需要手動重新建立它們。

配置檔位址的路徑已在 PowerShell 7 中變更。

  • 在 Windows PowerShell 5.1 中,profile 配置檔的位置是 $HOME\Documents\WindowsPowerShell
  • 在 PowerShell 7 中,設定檔 (profile) 的位置是 $HOME\Documents\PowerShell

設定檔檔名稱也已變更:

$PROFILE | Select-Object *Host* | Format-List
 AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
 AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
 CurrentUserAllHosts    : C:\Users\<user>\Documents\PowerShell\profile.ps1
 CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

如需詳細資訊,about_Profiles

PowerShell 7 與 Windows PowerShell 5.1 模組的相容性

您在 Windows PowerShell 5.1 中使用的大部分模組都已使用 PowerShell 7,包括 Azure PowerShell 和 Active Directory。 我們會繼續與其他小組合作,為更多模組新增原生 PowerShell 7 支援,包括 Microsoft Graph、Office 365 和其他模組。 如需目前支援的模組清單,請參閱 PowerShell 7 模組相容性

備註

在 Windows 上,我們也新增了 UseWindowsPowerShell 切換至 Import-Module,以簡化使用不相容模組之使用者的 PowerShell 7 轉換。 如需此功能的詳細資訊,請參閱 about_Windows_PowerShell_Compatibility

PowerShell 遠端控制

PowerShell 遠端執行功能可讓您在一台或多台遠端電腦上執行任何 PowerShell 命令。 您可以建立持續性連線、啟動互動式會話,以及在遠端電腦上執行腳本。

WS-Management 遠端存取

Windows PowerShell 5.1 和以下版本會使用 WS-Management (WSMAN) 通訊協議來進行連線交涉和數據傳輸。 Windows 遠端管理 (WinRM) 使用 WSMAN 通訊協定。 如果已啟用 WinRM,PowerShell 7 會使用名為 Microsoft.PowerShell 的現有 Windows PowerShell 5.1 端點進行遠端連線。 若要更新PowerShell 7 以包含自己的端點,請執行 Enable-PSRemoting Cmdlet。 如需連線到特定端點的相關資訊,請參閱 PowerShell 中的 WS-Management 遠端

若要使用 Windows PowerShell 遠端功能,遠端電腦必須設定為遠端管理。 如需詳細資訊,包括指示,請參閱 關於遠端需求

如需有關遠端作業的更多資訊,請參閱 關於遠端

以 SSH 為基礎的遠端處理

在 PowerShell 6.x 中新增了基於 SSH 的遠端功能,以支援其他無法使用 Windows 原生元件的操作系統,例如 WinRM。 SSH 遠端會在目標電腦上建立 PowerShell 主機處理序,作為 SSH 子系統。 如需在 Windows 或 Linux 上設定基於 SSH 的 PowerShell 遠端處理的詳細資訊和範例,請參閱:透過 SSH 的 PowerShell 遠端處理

備註

PowerShell 資源庫(PSGallery)包含一個模組和 cmdlet,可自動設定 SSH 型遠端連線。 從 PSGallery 安裝 Microsoft.PowerShell.RemotingTools 模組,然後執行 Enable-SSH Cmdlet。

New-PSSessionEnter-PSSessionInvoke-Command Cmdlet 有新的參數集來支援 SSH 連線。

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

若要建立遠端會話,請使用 HostName 參數指定目標電腦,並使用 UserName提供使用者名稱。 以互動方式執行 Cmdlet 時,系統會提示您輸入密碼。

Enter-PSSession -HostName <Computer> -UserName <Username>

或者,使用 HostName 參數時,請提供使用者名稱資訊,後面接著 at sign (@),後面接著計算機名稱。

Enter-PSSession -HostName <Username>@<Computer>

您可以使用私鑰檔案搭配 KeyFilePath 參數來設定 SSH 金鑰驗證。 如需詳細資訊,請參閱 OpenSSH 金鑰管理

受支援的群組原則

PowerShell 包含組策略設定,可協助您為企業環境中的伺服器定義一致的選項值。 這些設定包括:

  • 控制台會話組態:設定執行 PowerShell 的組態端點。
  • 開啟模組記錄:設定模組的LogPipelineExecutionDetails屬性。
  • 開啟 PowerShell 腳本區塊記錄:啟用所有 PowerShell 腳本的詳細記錄。
  • 開啟腳本執行:設定PowerShell執行原則。
  • 開啟 PowerShell 轉譯:可讓您將 PowerShell 命令的輸入和輸出擷取到以文字為基礎的文字記錄。
  • 設定 Update-Help 的預設來源路徑:將可更新說明的來源設定為目錄,而不是因特網。

如需詳細資訊,請參閱 about_Group_Policy_Settings

PowerShell 7 包含組策略範本和 $PSHOME中的安裝腳本。

組策略工具會使用系統管理範本檔案(.admx.adml)在使用者介面中填入原則設定。 這可讓系統管理員管理以登錄為基礎的原則設定。 InstallPSCorePolicyDefinitions.ps1 文稿會在本機計算機上安裝PowerShell系統管理範本。

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    Directory: C:\Program Files\PowerShell\7

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/27/2020 12:38 AM          15861 InstallPSCorePolicyDefinitions.ps1
-a---           2/27/2020 12:28 AM           9675 PowerShellCoreExecutionPolicy.adml
-a---           2/27/2020 12:28 AM           6201 PowerShellCoreExecutionPolicy.admx

個別事件記錄檔

Windows PowerShell 和 PowerShell 7 會記錄事件,以分隔事件記錄檔。 使用下列命令來取得PowerShell記錄的清單。

Get-WinEvent -ListLog *PowerShell*

如需詳細資訊,請參閱 about_Logging_Windows

改善 Visual Studio Code 的編輯體驗

Visual Studio Code (VSCode)PowerShell 擴充功能 是 PowerShell 7 支援的腳本環境。 Windows PowerShell 整合式腳本環境 (ISE) 僅支援 Windows PowerShell。

更新後的 PowerShell 擴充功能包括:

  • 新的 ISE 相容性模式
  • 整合式控制台中的 PSReadLine,包括語法醒目提示、多行編輯和返回搜尋
  • 穩定性和效能改善
  • 新的 CodeLens 功能整合
  • 改善路徑自動完成

若要更輕鬆地轉換至 Visual Studio Code,請在 命令選擇區中使用 啟用 ISE 模式的 函式。 此函式會將 VSCode 切換成 ISE 樣式的版面配置。 ISE 樣式的版面配置可讓您在熟悉的用戶體驗中提供 PowerShell 的所有新功能和功能。

若要切換至新的 ISE 配置,請按 Ctrl+Shift+P,以開啟 命令面板,輸入 PowerShell,然後選取 [PowerShell:啟用 ISE 模式]。

若要將版面設定設定為原始版面配置,請開啟 命令選擇區,選取 [PowerShell:停用 ISE 模式 (還原為預設值)

如需將 VSCode 版面配置自定義為 ISE 的詳細資訊,請參閱 如何在 Visual Studio Code 中復寫 ISE 體驗

備註

沒有計劃使用新功能來更新ISE。 在最新版的 Windows 10 或 Windows Server 2019 和更新版本中,ISE 現在是使用者可卸載的功能。 沒有永久移除 ISE 的計劃。 PowerShell 小組及其合作夥伴著重於改善適用於 Visual Studio Code 的 PowerShell 擴充功能中的腳本體驗。

後續步驟

有了有效移轉的知識,立即安裝 PowerShell 7