可能的解决方案

可能的解决方案

有没有什么方法可以明确区分这两者?

我知道我可以在“开始”屏幕上查找任务栏或电源按钮,但我更想知道是否有任何地方实际显示 8.1 Update 1。我知道 MS 有这一页但是如果能有一种编程的方式来检测它会更好,尤其是最新的 ISO 已经包含了更新内容。

据我所知,Windows 8.1 和 Windows 8.1. Update 1 之间的ver和的输出wmic os相同,并且系统属性仍然报告 Windows 8.1。

答案1

可能的解决方案

下面是一些批处理脚本,可以检查操作系统是否是 Windows 8.1,是否带有KB2919355。退出代码将是下列之一:

  • 0:Windows 8.1
  • 1:Windows 8.1 更新(已安装 KB2919355)
  • 2:不是 Windows 8.1

批处理脚本 A - 更新检查

这是最可靠的方法。脚本首先通过将版本与 进行比较来检查操作系统是否为 Windows 8.1 6.3.9600。然后查询所有已安装的更新以验证是否已安装 KB2919355 更新。

@echo off

for /f "usebackq tokens=2 delims==" %%G in (
`wmic os get version /value ^| findstr /c:"="`
) do set version=%%~G

if not "%version%" == "6.3.9600" exit /b 2

wmic qfe get hotfixid | findstr /i /c:"KB2919355" >nul
set /a errorlevel=%errorlevel% ^^ 1

exit /b %errorlevel%

批处理脚本 B - 构建版本检查

另外,您可以检查 Windows 构建版本,它比第一个脚本更快,因为您不需要枚举所有更新。由于它使用注册表值,因此可能不那么可靠。

@echo off

for /f "usebackq tokens=2 delims==" %%G in (
`wmic os get version /value ^| findstr /c:"="`
) do set version=%%~G

if not "%version%" == "6.3.9600" exit /b 2

for /f "tokens=4 delims=. " %%G in (
'"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx" | findstr /i /c:"REG_SZ" "'
) do set /a build=%%~G

if %build% geq 17031 exit /b 1
exit /b 0

批处理脚本 C-构建版本检查(Internet Explorer)

与之前的脚本一样,这里的概念类似,只是检查的是 Internet Explorer(IE)版本。

@echo off

for /f "usebackq tokens=2 delims==" %%G in (
`wmic os get version /value ^| findstr /c:"="`
) do set version=%%~G

if not "%version%" == "6.3.9600" exit /b 2

for /f "tokens=3,6 delims=. " %%G in (
'"reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v "svcVersion" | findstr /i /c:"REG_SZ" "'
) do set /a major=%%~G & set /a build=%%~H

if %major% equ 11 if %build% geq 17031 exit /b 1
if %major% geq 12 exit /b 1
exit /b 0

笔记该脚本假定任何高于或等于 12 的 IE 版本都可以在安装了更新 KB2919355 的 Windows 8.1 系统上使用。

Windows RT 8.1、Windows 8.1 和 Windows Server 2012 R2 的所有未来安全和非安全更新均需要安装此更新。我们建议您在基于 Windows RT 8.1、Windows 8.1 或 Windows Server 2012 R2 的计算机上安装此更新,以便继续接收未来更新。

来源:Windows RT 8.1、Windows 8.1 和 Windows Server 2012 R2 更新:2014 年 4 月

鉴于上述情况,我们有理由认为,任何较新的 IE 版本都需要更新作为先决条件,就像在 Windows Vista 上安装 IE 9 需要 SP2

答案2

解析BuildLabEx字符串

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | findstr BuildLabEx

如果数量大于,则表示17031用户安装了更新 1。

答案3

我们使用名为 WuInstall 的命令行实用程序 (http://www.wuinstall.com)可以做一些与修补相关的有用事情,其中​​包括启用批处理脚本来检查是否安装了更新

命令行显示所有已安装的更新

WUInstall.exe /搜索 /条件“IsInstalled=1”/离线

要检查某个 KB 是否已安装(有很多过滤选项),您可以检查:

WUInstall.exe /搜索/条件“IsInstalled=1”/离线/匹配“KB982214”

该实用程序会执行一些命令行输出,可以使用名为 /xmlout 的选项将其重定向到 xml 文件,或者直接重定向到文件,例如 >out.txt

答案4

我只是在 Windows 中检查了“winstore”文件夹,因为我注意到所有版本的 Windows 中都有明显的差异。

甚至可以运行命令 WinStore 来查看它。

REM 模拟操作系统检查:安装 c: cd\ 如果存在“c:\windows\WinStore”转到 WIN8

:Win8 REM特定于 win8 机器的代码

相关内容