從 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-PSSession
、Enter-PSSession
和 Invoke-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!