Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Список обновлений KB

Ответить
Настройки темы
CMD/BAT - Список обновлений KB

Ветеран


Сообщения: 2196
Благодарности: 727


Конфигурация

Профиль | Отправить PM | Цитировать


Нужна помощь в написании скрипта по выводу всех обновлений типа КВ* в разделе и подразделах HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
начал примерно так
Код: Выделить весь код
@ECHO OFF
SetLocal enabledelayedexpansion

SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
set "upd=%%a"
if /i "!upd:~0,2!"=="KB" echo !upd!
)
pause

Отправлено: 14:08, 10-10-2011

 

Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата sov44:
по выводу всех обновлений »
Такой подойдет?
Код: Выделить весь код
wmic qfe get Caption, Description, HotFixID, InstalledOn >ListUpdates.txt
Форматированный список (со ссылками и прочими подробностями) в ListUpdates.txt

Отправлено: 14:15, 10-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Цитата gora:
Такой подойдет? »
наверное нет, т.к. в дальнейшем при установке обновлений планируется их перебор. Устанавливать только те, которых нет в системе.
п.с. в посте 1 столкнулся в проблемой отображения обновлений в "чистом" виде, то есть только в виде КВ123456 или КВ1234567 без дополнительных символов в конце.

Отправлено: 14:49, 10-10-2011 | #3


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Вроде сделал. Прошу проверить верность скриптов и подсказать, как их объединить в один
Код: Выделить весь код
@ECHO OFF
SetLocal enabledelayedexpansion

SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
set "upd=%%a"
if /i "!upd:~0,2!"=="KB" (
set "up1=!upd:~0,9!"
if /i "!up1:~-1!"=="-" set "up1=!up1:~0,8!"
if /i "!up1:~-1!"=="_" set "up1=!up1:~0,8!"
echo !up1!
)
)
pause
Код: Выделить весь код
@ECHO OFF
SetLocal enabledelayedexpansion

SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
        FOR /f "tokens=1,2*" %%b IN ('reg query "%UNISTALL%\%%a" ^| FIND /I "HelpLink"') DO (
set "tt=%%d"
if /i "!tt:~7,21!"=="support.microsoft.com" (
set "up2=!tt:~-9!"
if /i "!up2:~0,2!"=="d=" set "up2=KB!up2:~2!"
if /i "!up2:~0,1!"=="=" set "up2=KB!up2:~1!"
if /i "!up2:~0,3!"=="id=" set "up2=KB!up2:~3!"
if /i "!up2:~0,3!"=="kb/" set "up2=KB!up2:~3!"
if /i "!up2:~6,2!"=="-v" set "up2=KB!up2:~0,-3!"
if /i "!up2:~0,4!"=="KBKB" set "up2=!up2:~2!"
echo !up2!
)
        )
)
pause

Отправлено: 00:33, 11-10-2011 | #4


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Слепил всё в один файл. Осталось убрать дублирование некоторых записей.
Код: Выделить весь код
@ECHO OFF
SetLocal enabledelayedexpansion

SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (

FOR /f "tokens=1,2*" %%b IN ('reg query "%UNISTALL%\%%a" 2^>nul ^| FIND /I "HelpLink"') DO (
set "tt=%%d"
if /i "!tt:~7,21!"=="support.microsoft.com" (
set "up2=!tt:~-9!"
if /i "!up2:~0,2!"=="d=" set "up2=KB!up2:~2!"
if /i "!up2:~0,1!"=="=" set "up2=KB!up2:~1!"
if /i "!up2:~0,3!"=="id=" set "up2=KB!up2:~3!"
if /i "!up2:~0,3!"=="kb/" set "up2=KB!up2:~3!"
if /i "!up2:~6,2!"=="-v" set "up2=KB!up2:~0,-3!"
if /i "!up2:~0,4!"=="KBKB" set "up2=!up2:~2!"
if /i "!up2:~0,2!"=="b/" set "up2=KB!up2:~2!"
::echo !up2!
call :fn1 !up2!
)
)
 FOR /f "tokens=1,2*" %%b IN ('reg query "%UNISTALL%\%%a" 2^>nul ^| Find "REG_SZ"') DO (
set "zz=%%d"
if /i "!zz:~0,2!"=="KB" (
if /i "!zz:~-2!"=="v2" set "zz=!zz:~0,-2!"
set "up3=!zz!"
::echo !up3!
call :fn1 !up3!
)
)
)
pause

:fn1
set "update=%1"
Echo %update%
Надеюсь на помощь...

Последний раз редактировалось sov44, 11-10-2011 в 21:31. Причина: почти решено


Отправлено: 17:03, 11-10-2011 | #5


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата sov44:
Устанавливать только те, которых нет в системе. »
Выдрал кусок из своего рабочего обновлятора. В примере обновления (только системные; IE, WMP требуют другого разбора) и скрипт находятся в одной директории, для боеготовности удалить Echo:
Код: Выделить весь код
@Echo Off
For /F "Tokens=1-4* Delims=-" %%A in ('Dir /B "*.exe"') Do Call :_Func "%%A" "%%B" "%%C" "%%D" "%%E"
GoTo :EoF

:_Func
Set Version=%~3
If /i "!Version:~0,1!"=="v" (Set UpdNameVer=%~2-%~3) Else (Set UpdNameVer=%~2)
Reg Query "HKLM\Software\Microsoft\Updates" /s 2>nul|Find /i "%UpdNameVer%" 1>nul 2>&1||^
Reg Query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\HotFix" /s 2>nul|Find /i "%UpdNameVer%" 1>nul 2>&1||^
If /i %5=="" (Echo Start /Wait %~1-%~2-%~3-%~4 /quiet /norestart) Else (Echo Start /Wait %~1-%~2-%~3-%~4-%~5 /quiet /norestart)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:37, 12-10-2011 | #6


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


El Sanchez, спасибо за скрипт и за наводку по месторасположению обновлений. Одно осталось не решенным в моём скрипте - убрать повторы выводов обновлений.

Отправлено: 17:25, 12-10-2011 | #7


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


После установки обновлений Office 2010, выяснил, что информация об их установке ( не всех, а только некоторых) прописывается только в
Код: Выделить весь код
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
В связи с этим попытался объединить свой скрипт и скрипт El Sanchez.
читать дальше »
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Echo.
Echo                   Установка обновлений
Echo Если обновления есть в системе, их установка не производится
Echo.
For /F "Tokens=1-4* Delims=-" %%A in ('dir /b /od "*.exe"') Do Call :fn1 "%%A" "%%B" "%%C" "%%D" "%%E"

SET UNISTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall

FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNISTALL%"') DO (
FOR /f "tokens=1,2*" %%b IN ('reg query "%UNISTALL%\%%a" 2^>nul ^| FIND /I "HelpLink"') DO (
set "tt=%%d"
if /i "!tt:~7,21!"=="support.microsoft.com" (
set "up2=!tt:~-9!"
if /i "!up2:~0,2!"=="d=" set "up2=KB!up2:~2!"
if /i "!up2:~0,1!"=="=" set "up2=KB!up2:~1!"
if /i "!up2:~0,3!"=="id=" set "up2=KB!up2:~3!"
if /i "!up2:~0,3!"=="kb/" set "up2=KB!up2:~3!"
if /i "!up2:~6,2!"=="-v" set "up2=KB!up2:~0,-3!"
if /i "!up2:~0,4!"=="KBKB" set "up2=!up2:~2!"
if /i "!up2:~0,2!"=="b/" set "up2=KB!up2:~2!"
call :fn1 !up2!
)
)
 FOR /f "tokens=1,2*" %%b IN ('reg query "%UNISTALL%\%%a" 2^>nul ^| Find "REG_SZ"') DO (
set "zz=%%d"
if /i "!zz:~0,2!"=="KB" (
if /i "!zz:~-2!"=="v2" set "zz=!zz:~0,-2!"
set "up3=!zz!"
call :fn1 !up3!
)
)
)

pause
GoTo :EoF

:fn1

Set Version=%~3
set "n=%~1"
set "update=%1"

If /i "!Version:~0,1!"=="v" (Set UpdNameVer=%~2-%~3) Else (Set UpdNameVer=%~2)

if /i not "KB%UpdNameVer:~2%"=="update=%1" (
If /i %5=="" (
Echo Установка обновления %n%  -  KB%UpdNameVer:~2%
start /Wait %~1-%~2-%~3-%~4 /quiet /norestart
) Else (
Echo Установка обновления %n%  -  KB%UpdNameVer:~2%
start /Wait %~1-%~2-%~3-%~4-%~5 /quiet /norestart
)
)

При объединении, в скрипте появилась ошибка. Прошу подсказать, как её исправить.

Последний раз редактировалось sov44, 12-10-2011 в 23:39.


Отправлено: 23:25, 12-10-2011 | #8


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Всё ещё актуально! Как объединить скрипты?

Отправлено: 19:55, 17-10-2011 | #9


Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Подскажите в такой ситуации.
Код: Выделить весь код
@Echo off
SetLocal enabledelayedexpansion
if exist "%ProgramFiles(x86)%" (set bit=x64) else (set bit=x86)
Title Поиск отсутствующих обновлений для Windows %bit%
wmic qfe get HotFixID >temp.txt
.\iconv\iconv -c -f UTF-16LE -t CP866 temp.txt > ListUpdated.txt
del /S /Q temp.txt >nul
For /F "Tokens=1-3* Delims=-" %%a in ('Dir /B ".\%bit%\*.msu"') Do Call :matching %%a %%b %%c %%d
goto :EOF

:matching
for /f "Tokens=1 Delims= " %%e in ('FindStr /IB "%2" "ListUpdated.txt"') do set upd=%%e
if "%2"=="%upd%" (echo Обновление %2 присутствует в системе.>>%~n0.log)
Данный код, проверяет, установлено ли обновление, которое находится в папке %bit%, в системе или нет. А нужно наоборот, если ли в папке %bit% обновление, которое установлено в системе, или нет?

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 15:45, 02-02-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Список обновлений KB

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Общее - Список текущих обновлений Windows VISTA prokazzza Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 123 10-01-2011 20:07
Службы - [решено] Не виден список обновлений. Mura1708 Microsoft Windows Vista 2 07-01-2010 21:17
Список текущих обновлений Windows XP Vadikan Автоматическая установка Windows 2000/XP/2003 546 09-12-2009 19:09
Полный список обновлений для server2003 Diesel315 Microsoft Windows NT/2000/2003 11 10-02-2009 01:01
Разное - Список доступных обновлений для Windows Vista SamLab Microsoft Windows Vista 8 08-09-2008 22:40




 
Переход