PowerShell 現在已經發展到 7.1 版,而且還有 PowerShell Core 這個跨平台的版本,我們如何確認當前系統上的 PowerShell 版本呢?方法其實還滿多的。
先提一下,Windows PowerShell 內建在幾乎所有的 Windows 作業系統中,但預設安裝的版本會有些不同,以當前最普遍作為預設安裝的 PowerShell 5.1 來說,以下作業系統版本都是預設內建用 5.1 的 PowerShell:
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
- Windows Server 2008 R2 (含 Service Pack 1)
- Windows 10 1607 版和更新版本
- Windows 10 1507 版和 1511 版
- Windows 8.1
- Windows 7 (含 Service Pack 1)
其他預設安裝版本資訊,可以參考這份Windows PowerShell 系統需求官方文件。
檢查當前版本
在使用 PowerShell cmdlet 的時候,有時要注意執行環境是否支援該 cmdlet,而且有些 cmdlet 可能在新的版本已經不支援了,像是 Register-ScheduledJob
這支註冊成 PowerShell 排程的 cmdlet 在 7.1 版已經沒有了。
檢查當前 PowerShell 版本的方法,基本上有以下 4 種:
(Get-Host).Version
$host.Version
$PSVersionTable.PSVersion
(建議用此方法)- 查看 Registry 註冊表
第 1 種方式是先使用 Get-Host
取得執行 PowerShell Engine 的宿主環境,然後取出記錄在宿主中的 Version
屬性資訊,這方法相當容易理解,但有時候宿主可能會用到不同版本的 PowerShell Engine,而且用這支 cmdlet 來取得遠端伺服器的 PowerShell 版本時,會有些奇怪,這要稍微注意。
第 2 種方式是使用 PowerShell 啟動時自動建立的變數 $host
,基本上這就是用 Get-Host
取得資訊的,所以狀況會跟他一樣。
第 3 種方式是使用 $PSVersionTable
這個自動建立的變數,這個變數是唯讀且會回傳當前 PowerShell Engine 版本 PSVersion
,而且除了 PowerShell 版本之外,還會提供 PSEdition
告訴你是哪一種類型的 PowerShell,例如是 Desktop
(Windows PowerShell) 還是 Core
(PowerShell Core)。
第 4 種方式是直接去 Windows Registry 註冊表查詢,基本上就是去註冊表找 HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
路徑下的 PowerShellVersion
設定值,也因為是去註冊表查,所以這方法可以不用 PowerShell 指令也查得到,例如用 reg
或直接開啟 Windows Registry 視窗介面查詢。
後記
看到這裡其實不難發現,如果是要用 PowerShell 查詢當前環境的 PowerShell 版本,使用 $PSVersionTable.PSVersion
是最好用的方法,避免了不少問題。
參考資料: