获取 PowerShell 版本

Migel Hewage Nimesha 2023年1月30日
  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.