從 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 套件需要 管理員 istrator 許可權。 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.2 建置在 .NET 6.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 中,設定檔的位置是
$HOME\Documents\WindowsPowerShell
。 - 在 PowerShell 7 中,設定檔的位置是
$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 管理遠端處理
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 管理遠端處理
若要使用 Windows PowerShell 遠端功能,遠端電腦必須設定為遠端管理。 如需詳細資訊,包括指示,請參閱 關於遠端需求。
如需使用遠端的詳細資訊,請參閱 關於遠端
SSH 型遠端處理
以 SSH 為基礎的遠端功能已新增至 PowerShell 6.x,以支援其他無法使用 WinRM 等 Windows 原生元件的操作系統。 SSH 遠端會在目標電腦上建立 PowerShell 主機處理序作為 SSH 子系統。 如需在 Windows 或 Linux 上設定 SSH 型遠端的詳細資訊和範例,請參閱: 透過 SSH 進行 PowerShell 遠端處理。
注意
PowerShell 資源庫 (PSGallery) 包含模組和 Cmdlet,可自動設定 SSH 型遠端。 Microsoft.PowerShell.RemotingTools
從 PSGallery 安裝模組,然後執行 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 管理員 istrative 範本。
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 的編輯體驗
具有 PowerShell 延伸模組的 Visual Studio Code (VSCode) 是 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 !