如何检查安装了哪个版本的 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 的此文档:
在“升级现有的 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。