【问题标题】:Windows batch file for invalid microsoft updates用于无效 Microsoft 更新的 Windows 批处理文件
【发布时间】:2016-11-21 12:58:02
【问题描述】:

我在创建 Windows 批处理文件时感到震惊,该文件仅指示我的计算机/Windows 服务器上是否安装了无效的知识库文章。

这就是我现在的位置,

脚本:

@ECHO OFF
WMIC QFE GET HOTFIXID>%~dp0QFE_list.txt
FOR /f "delims=," %%a IN (%~dp0Patch_List.txt) DO (
    CALL :PATCH_LIST %%a
)
GOTO :EOF

:PATCH_LIST
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s /f "%1">NULL.txt
IF %ERRORLEVEL% EQU 0 ECHO %1: INSTALLED
IF %ERRORLEVEL% NEQ 0 (
ECHO FIND %1
FIND /C "%1" %~dp0QFE_List.txt>NULL.txt
IF ERRORLEVEL 0 ECHO %1: QFE INSTALLED
IF ERRORLEVEL 1 ECHO %1: **** NOT INSTALLED! ****
)

当前输出:---------- C:\USERS\PVENK17\DESKTOP\TEST\QFE_LIST.TXT: 1

所需的输出: : 已安装

输入文件内容:KB3057839,KB3002657

问题:

即使它适用于 1 KBarticle。当我在输入文件中放置超过 1 个时,它不起作用。

请帮我解决这个问题。

谢谢 普拉桑特

【问题讨论】:

标签: batch-file wmic errorlevel hotfix qfe


【解决方案1】:
@echo off
title HOTFIXID_KB_FOUND
setlocal enabledelayedexpansion
cd /d "%~dp0"
for /f %%A in (KB_list.txt) do (
wmic qfe get hotfixid |findstr /i "%%A"
if !errorlevel! equ 0 echo %%A: ****INSTALLED****
if !errorlevel! equ 1 echo %%A: NOT INSTALLED
)
pause

KB_list.txt,就我而言,是导致 BSOD 的有害更新列表。当然,您可以自动化和删除,但并不总是得到 wusa.exe,有时需要 dism.exe

使用 wusa.exe 删除示例

wusa.exe /uninstall /kb:3065987 /quiet /norestart

使用 dism.exe 删除的示例

DISM /Online /Get-Packages /Format:Table
DISM /Online /Remove-Package /PackageName:Package_for_KB3045999~31bf3856ad364e35~amd64~~6.1.1.1

【讨论】:

    【解决方案2】:

    经过更多调试,我编写了这段代码,我知道它不是理想的解决方案,但它可以工作

    代码:

    @ECHO OFF
    title IllegalPatchCheck
    
    echo Select a server. (AW/PG)
    set /p server=
    
    IF /i "%server%"=="AW" goto AdminWorkstation
    IF /i "%server%"=="PG" goto PeripheralGateway
    
    echo Invalid Input.
    goto commonexit
    
    :AdminWorkstation
    
    WMIC QFE GET HOTFIXID>%~dp0QFE_list.txt
    
    find /c "KB3057839" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 ECHO KB3057839  NOT Found
    if %errorlevel% neq 1 ECHO KB3057839 Found
    
    find /c "KB3058515" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 ECHO KB3057839  NOT Found
    if %errorlevel% neq 1 echo KB3058515 Found
    
    find /c "KB3059317" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 echo KB3059317 NOT found
    if %errorlevel% neq 1 echo KB3059317 Found
    
    find /c "KB3063858" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 echo KB3063858 NOT found
    if %errorlevel% neq 1 echo KB3063858 Found
    
    goto commonexit
    
    :PeripheralGateway
    
    WMIC QFE GET HOTFIXID>%~dp0QFE_list.txt
    
    find /c "KB2984972" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 echo KB2984972 NOT Found
    if %errorlevel% neq 1 echo KB2984972 Found
    
    find /c "KB3046049" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 echo KB3046049 NOT Found
    if %errorlevel% neq 1 echo KB3046049 Found
    
    find /c "KB3002657" %~dp0QFE_list.txt>nul
    if %errorlevel% equ 1 echo KB3002657 NOT Found
    if %errorlevel% neq 1 echo KB3002657 Found
    
    goto commonexit
    
    :commonexit
    del /q /f %~dp0QFE_list.txt >nul
    pause
    

    谢谢 普拉桑特

    【讨论】:

      【解决方案3】:

      我可以通过更改输入文件格式来完成这项工作:每行 1 KB

      KB3057839
      KB3002657
      

      然后,只需删除“delims”内容,它就适用于多个项目。不确定最后几行的逻辑。好像说“已安装/未安装”

      顺便说一句,将您的命令重定向到 NUL 以避免创建无用的文件。

      @ECHO OFF
      WMIC QFE GET HOTFIXID>%~dp0QFE_list.txt
      FOR /f %%a IN (%~dp0Patch_List.txt) DO (
          CALL :PATCH_LIST %%a
      )
      GOTO :EOF
      
      :PATCH_LIST
      REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s /f "%1">NUL
      IF %ERRORLEVEL% EQU 0 ECHO %1: INSTALLED
      IF %ERRORLEVEL% NEQ 0 (
      ECHO FIND %1
      FIND /C "%1" %~dp0QFE_List.txt>NUL
      IF ERRORLEVEL 0 ECHO %1: QFE INSTALLED
      IF ERRORLEVEL 1 ECHO %1: **** NOT INSTALLED! ****
      )
      

      【讨论】:

      • 我只是按照指示执行了这部分代码,但输出不是想要的。
      • 输出:查找 KB3057839 KB3057839:已安装 QFE 按任意键继续。 . .查找 KB3002657 KB3002657:已安装 QFE KB3002657:**** 未安装! **** 按任意键继续 。 . .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2014-05-01
      • 2012-12-13
      • 2021-08-30
      相关资源
      最近更新 更多