2016-07-18 4 views
2

Ich bin beim Erstellen einer Windows-Batch-Datei geschlagen, die nur angibt, wenn ein ungültiger KB-Artikel auf meinem Computer/Windows-Server installiert ist.Windows Batch-Datei für ungültige Microsoft-Updates

Dies ist, wo ich jetzt bin,

Script:

@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! **** 
) 

Stromausgang: ---------- C: \ Benutzer \ PVENK17 \ TEST \ QFE_LIST DESKTOP \ .TXT: 1

gewünschte Ausgabe:: Installierte

Eingabedatei Inhalt: KB3057839, KB3002657

Ausgabe:

Obwohl es für 1 KBarticle funktioniert. Wenn ich mehr als 1 in die Eingabedatei lege, funktioniert es nicht.

Bitte helfen Sie mir, dieses Problem zu lösen.

Dank Prashanth

+0

[Debuggen von Batch-Dateien] (http://www.robvanderwoude.com/battech_debugging.php) – DavidPostill

Antwort

0

kann ich diese Arbeit machen, indem das Eingabedateiformat zu ändern: 1 KB pro Zeile

KB3057839 
KB3002657 

Dann entfernen Sie einfach das „delims“ Zeug und arbeitet es mehrere Artikel für. Nicht sicher über die Logik der letzten Zeilen. Es scheint zu sagen "installiert/nicht installiert"

Und BTW umleiten Sie Ihre Befehle an NUL, um die Erstellung einer nutzlosen Datei zu vermeiden.

@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! **** 
) 
+0

Ich habe gerade diesen Teil des Codes wie angewiesen ausgeführt, aber die Ausgabe war nicht die gewünschte. –

+0

AUSGABE: FINDEN KB3057839 KB3057839: QFE INSTALLIERT Drücken Sie eine beliebige Taste, um fortzufahren. . . FINDE KB3002657 KB3002657: QFE INSTALLIERT KB3002657: **** NICHT INSTALLIERT! **** Drücken Sie eine beliebige Taste, um fortzufahren. . . –

0

Nach viel Debuggen ich diesen Code geschrieben hat, weiß, dass ich es nicht ideal, aber es funktioniert

Code:

@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 

Dank Prashanth

Verwandte Themen