安装了哪个版本的 Windows 管理框架?

安装了哪个版本的 Windows 管理框架?

如何检查安装了哪个版本的 Windows Management Framework (WMF)?这似乎应该是一件很容易的事情,但我却无法找到。即使在 Google 上搜索了一堆不同版本的问题,也几乎找不到答案。

它不在 appwiz.cpl 中,并且 regedit 找不到“Windows 管理框架”的任何内容,并且它为“wmf”找到了太多无关紧要的东西

我只是想知道如何以任何合理的方式检查它。是否有注册表项?是否有我可以检查的文件?什么都可以吗?

我在 serverfault 上找到了最接近的答案:检测 Windows 管理框架版本的方法。这个问题开头是一样的,但它似乎要求在 GPO 中使用一种特定的检查方法;也许这就是它没有得到答案的原因。

我想在多台计算机上检查这一点。我首先要检查的是 Windows Server 2008 R2 Standard。还会有其他 Windows Server 操作系统。

如果您知道任何比我所用的更好的标签,请评论或重新标记;我找不到任何可以很好地描述这个问题的东西。


更新:有些人似乎认为“ $PSVersionTable”(和/或它的各种属性)是一个答案。我最近终于意识到这是一个 PowerShell 变量(也许“PS”前缀应该会给我带来答案,但事实并非如此),并试图深入挖掘。这导致了另一个问题:PowerShell 的 $PSVersionTable 的内容代表什么?

更新 2:根据我现在收集的所有信息以及我的进一步理解,我相当肯定 PowerShell 的内置变量在$PSVersionTable.PSVersion技术上不是这个问题的答案,但它通常(有时?总是?不确定)相同,因为版本可能齐头并进。变量$PSVersionTable.WSManStackVersion可能是我想要的,但该属性的官方简短描述显示它代表 WS-Management 堆栈。WS-Management 堆栈与 WMF 是一回事吗?谷歌搜索表明它们密切相关,但我不确定答案是否是肯定的。

答案1

请参阅 Microsoft 的此文档:

https://web.archive.org/web/20170826230335/https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell?view=powershell-5.1

在“升级现有的 Windows Powershell”部分中,具体说明了:

PowerShell 的安装包位于 WMF 安装程序内。WMF 安装程序的版本与 PowerShell 的版本匹配;Windows PowerShell 没有独立的安装程序。

我想这就是答案。运行$PSVersionTable.PSVersion以获取版本。

答案2

我知道这是一个老问题,但对于其他通过谷歌搜索发现这个问题的人来说:

我想说这$PSVersionTable.PSVersion是 WMF 版本最可靠的指标。请参见下面的示例。

Windows 7 全新安装:

Name                           Value
----                           -----
PSVersion                      2.0
WSManStackVersion              2.0
CLRVersion                     2.0.50727.5420
BuildVersion                   6.1.7601.17514
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

安装 .NET 4.5 和 WMF 4 后的 Windows 7:

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18408
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

安装 WMF 5 后的 Windows 7:

Name                           Value
----                           -----
PSVersion                      5.0.10586.117
WSManStackVersion              3.0
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.117
CLRVersion                     4.0.30319.18408
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Windows 10,包含开箱即用的 WMF 5:

Name                           Value
----                           -----
PSVersion                      5.0.10586.122
WSManStackVersion              3.0
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.122
CLRVersion                     4.0.30319.42000
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

所以正如您所看到的,版本似乎$PSVersionTable.WSManStackVersion.Major只在 WMF 4 安装时发生变化,然后保持在 3。同时$PSVersionTable.PSVersion.Major似乎报告了 WMF 的准确版本。

答案3

在 PowerShell 中,可从$PSVersionTable.WSManStackVersion.Major

我家的Windows 7系统:

PS C:\Users\Brian> $PSVersionTable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.5485
BuildVersion                   6.1.7601.17514
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1


PS C:\Users\Brian> $PSVersionTable.WSManStackVersion.Major
2
PS C:\Users\Brian>

然后在安装较新的 Windows 管理框架后:

PS C:\Users\Brian> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2


PS C:\Users\Brian>

答案4

通过识别要检查的版本的 KB 编号,然后使用 wmic 查询(在本例中为 wmic 查询)来确定是否已安装该 KB 编号,可以检查安装了哪个版本的 Windows Management Framework (WMF)。这些示例均基于使用 cmd.exe 运行命令。

** 检查 WMF 4.0 的命令

wmic qfe get hotfixid | find "KB2819745"
echo %ERRORLEVEL%

** 运行命令的示例:

C:\Program Files\Tivoli\TSM\baclient> wmic qfe get hotfixid | find "KB2819745"
KB2819745

C:\Program Files\Tivoli\TSM\baclient> echo %ERRORLEVEL%
0

在上面的例子中,安装了 WMF 4.0:从 wmic 查询返回 KB 和零返回代码。

** 检查 WMF 5.0 的命令

wmic qfe get hotfixid | find "KB3134760"
echo %ERRORLEVEL%

** 运行命令的示例:

C:\Program Files\Tivoli\TSM\baclient> wmic qfe get hotfixid | find "KB3134760"
C:\Program Files\Tivoli\TSM\baclient> echo %ERRORLEVEL%
1

因此,在上面的例子中,WMF 5.0 未安装:wmic 查询未返回任何内容,返回代码非零。

您可能使用了不同的 KB 来安装给定级别的 WMF,但这些是我目前正在使用的。

我总是检查 PowerShell(作为 WMF 的一部分安装或升级):

powershell.exe -NoLogo -Sta -NoProfile -NonInteractive -Command "Write-Host $PSVersionTable.PSVersion"
echo %ERRORLEVEL%

如果未安装 .NET 4.5,则升级到 WMF 4.0(以及之后再次升级到 5.0)时会出现问题,因此如果 PS 命令输出错误,您可能应该安装 .NET 4.5。

相关内容