在PowerShell中,有很多种方法可以执行相同的操作(或接近)。在这篇博客文章中,您将学习如何检查本地和远程计算机上的PowerShell版本的每种方法。我们将涵盖不推荐的方法和我推荐的方法。
有一些网站展示了各种检查PowerShell版本的方法。但没有一个综合列出所有方法的。我决定改变这种情况。
所有这些方法都适用于Windows PowerShell和PowerShell Core。这些方法也适用于从Windows PowerShell版本1.0到PowerShell 7的所有版本。
您可以找到运行的PowerShell版本的方法有:
(Get-Host).Version
属性$host.Version
属性- 注册表(仅适用于Windows PowerShell)
$PSVersionTable.PSVersion
属性
让我们从最不推荐的方法到最推荐的方法分析如何找到PowerShell的版本。
Get-Host
PowerShell有一个称为“主机”的概念。一个“主机”是一个托管PowerShell引擎的程序。它不是PowerShell引擎本身。PowerShell控制台或带有集成终端的代码编辑器都是PowerShell的“主机”。
A host can have a version that is completely independent of PowerShell itself. This can be deceiving to many newcomers. Let me show you why.
如果您运行(Get-Host).Version
,您会看到它返回一个看起来像是PowerShell引擎版本的版本号。外表可能具有欺骗性。
下面我在Windows PowerShell 5.1上运行了Get-Host
,您可以看到它返回的是5.1.17134.858。这看起来是一个合法的版本号。
然而,有时在集成终端中运行Get-Host
时,版本号是不同的。尽管通常情况下,host将代表相同的引擎版本,但并不一定总是如此。
通过在远程计算机上使用Get-Host检查Powershell版本
即使在本地计算机上运行Get-Host
似乎返回相同的版本,但在远程计算机上却从不返回相同的版本。
例如,让我们通过Invoke-Command
在远程Windows Server 2016服务器上运行Get-Host
,看看会发生什么。
据我所知,不可能在Windows Server 2016上运行PowerShell v1。
依赖于Get-Host
是一个不好的主意。
通过$host.Version命令检查Powershell版本
引用$host.Version
是另一种检查Powershell版本的方法。$host
变量是一个自动变量,返回与Get-Host
相同的输出。

$host.Version
這個方法沒什麼特別的。它就是執行Get-Host
一樣簡單。
在遠端電腦上顯示$host.Version
你將會看到透過PowerShell Remoting使用$host.Version
和執行Get-Host
時相同的行為。
危險,羅賓遜先生!
註冊表
如果你不想打開 PowerShell 本身,你也可以檢查註冊表。PowerShell 的版本被藏在註冊表路徑HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
的一個值下。這個註冊表鍵有一個名為PowerShellVersion
的值,你可以使用Get-ItemProperty
來參考它。
你可以看到這個版本是相似的,但不像其他選項那樣包含修訂版本。
使用其他工具
使用註冊表也意味著你根本不需要使用 PowerShell 就能找到版本。你可以從命令提示符或其他可以讀取註冊表的工具運行命令。
遠端電腦上的註冊表
註冊表是靜態的,值在本地或遠程不會改變。你可以放心地知道你在本地看到的和遠程看到的是一樣的。
在本地和遠程顯示相同的版本是很好的。但我有一種更好的方式可以使用$PSVersionTable
自動變數來向你展示。
使用$PSVersionTable.PSVersion命令檢查 PowerShell 版本
最后和最终的方法是引用$PSVersionTable
自动变量上的PSVersion
属性。这种方法将始终表示PowerShell引擎。
$PSVersionTable
自动变量是一个只读哈希表,返回有关PowerShell引擎版本的特定信息。这个自动变量不仅返回版本,还返回PSEdition。此属性可以是Core或Desktop ,以提供有关正在运行的PowerShell版本的更多信息。

远程计算机上的$PSVersionTable
使用$PSVersionTable
自动变量在本地和远程都是准确的。您可以看到,通过将$PSVersionTable.PSVersion
包装在脚本块中并在远程计算机上执行该代码,它将返回相同的版本。
摘要
在这篇博文中,您已经学会了检查PowerShell版本的所有方法,无论是在本地还是远程。我希望前几种方法给了您有关检查版本的方式的想法!如果我漏掉了任何方法,请在评论中告诉我。我将很乐意更新文章并给予您荣誉。
I recommend always using $PSVersionTable.PSVersion
. All of the other methods may appear similar to the PowerShell engine version but may not always reflect the engine version.