獲取 PowerShell 版本

Migel Hewage Nimesha 2023年1月30日 2022年5月16日
  1. 使用 $PSVersionTable.PSVersion 屬性獲取 PowerShell 版本
  2. 使用 (Get-Host).Version 屬性獲取 PowerShell 版本
  3. 使用 $host.Version 屬性獲取 PowerShell 版本
  4. 使用登錄檔獲取 PowerShell 版本
獲取 PowerShell 版本

PowerShell 是一種更復雜的命令提示符。它帶有大量準備好的 cmdlet 以及在各種場景中利用 .NET 框架/C# 的能力。PowerShell ISE 是一個圖形使用者介面,用於在 Windows 上除錯和編輯指令碼。在 PowerShell 中,同樣的事情可以通過多種方式完成。因此,主要有四種方法可以獲取 PowerShell 的版本,下面給出它們。

使用 $PSVersionTable.PSVersion 屬性獲取 PowerShell 版本

所以我們要研究的第一個方法是自動變數 $PSVersionTable 中的 PSVersion 屬性。在這裡,它代表 PowerShell 引擎。

PS52> $PSVersionTable.PSVersion

輸出:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1320

$PSVersionTable 是一個只讀雜湊表,提供有關 PoweShell 引擎版本和 PSEdition 的資訊。此引數可以是 Desktop 或 Core,它將為你提供有關你正在使用的 PowerShell 版本的其他資訊。

自動變數 $PSVersionTable 在本地和遠端一樣準確。我在下面的示例中包含 $PSVersionTable。指令碼塊內的 PSVersion 並在遠端計算機上執行它會返回相同的版本。

PS> Invoke-Command -ComputerName 11.0.0.3 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred

輸出:

使用 $PSVersionTable.PSVersion 屬性獲取 PowerShell 版本

使用 (Get-Host).Version 屬性獲取 PowerShell 版本

PowerShell 中使用了主機的概念。導致問題的不是 PowerShell 引擎。PowerShell 主機是帶有內建終端的 PowerShell 程式碼編輯器/控制檯。主機可以擁有完全獨立的 PowerShell 版本。

當使用 (Get-Host).Version 時,它會輸出類似於 PowerShell 版本的版本號。

PS52> (Get-Host).Version

輸出:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1320

但是,內建終端中的 Get-Host 版本並不總是相同的。儘管主機通常代表相同版本的 PowerShell 引擎,但情況並非總是如此。在本地計算機上呼叫 Get-Host 時,它總是返回相同的版本,但從不在遠端系統上。

因此,對所有事情都使用 Get-Host 是一個糟糕的主意。

使用 $host.Version 屬性獲取 PowerShell 版本

.$host.Version 是另一種獲取 PowerShell 引擎版本的方法。Get-Host 提供與 $host 變數相同的結果,一個完全自動化的變數。

PS52> $host.Version

輸出:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1320

這與 Get-host 方法非常相似。

使用登錄檔獲取 PowerShell 版本

僅當你不熱衷於啟動 PowerShell 時,你也可以檢查登錄檔。PowerShell 的版本儲存在登錄檔的鍵值路徑中,如下 HKLM:\SOFTWARE\Microsoft\PowerShell\3\ 並且也是一個值。Get-ItemProperty 可用於引用此登錄檔項中的 PowerShellVersion 值。

PS51> (Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

輸出:

5.1.19041.1
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.