Список установленных программ (CMD)

Обсуждение вопросов программирования (WSH/JScript/VBScript, CMD), проблемы и решения
Закрыто
nhutils
Сообщения: 595
Зарегистрирован: 09 дек 2009, 18:08
Контактная информация:

Список установленных программ (CMD)

Сообщение nhutils »

В командном файле тоже можно получить список установленных программ через просмотра реестра, как и в VBS (viewtopic.php?f=6&t=14).
Причём, используя доступ по сети (с соответствующими полномочиями, конечно), можно просматривать список установленных программ и на других компьютерах. Это даёт администратору большие возможности: например, легко проверить, на всех ли компьютерах установлено необходимое обновление Windows или, наоборот, везде ли удалена какая-то конфликтующая программа.
Получить список программ можно следующим командным файлом:

Код: Выделить всё

@echo off
rem Этот командный файл записывает список программ, установленных на 
rem удалённом компьютере.
rem %1 Сетевое имя компьютера в формате PCNAME (пустое значение означает
rem    локальный компьютер).

rem Определяем путь к папке реестра
set reg_key=hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
if not "%1" == "" set reg_key=\\%~1\%reg_key%

rem Перебираем установленные программы
for /F %%a in ('reg query "%reg_key%"') do ^
for /F "tokens=1,2*" %%b in ('reg query "%%a"') do ^
if "%%b"=="DisplayName" echo %%d
Для проверки того, установлена ли программа на каком-то одном компьютере, можно использовать следующий командный файл check-app-pc.cmd

Код: Выделить всё

@echo off
rem Этот командный файл проверяет, установлена ли заданная программа на 
rem удалённом компьютере.
rem %1 Полное название программы или часть названия, например, KB2570791.
rem %2 Сетевое имя компьютера в формате PCNAME (пустое значение означает
rem    локальный компьютер).
rem Возвращаемые коды:
rem  0 Программа установлена.
rem  2 Программа не найдена.
rem 87 Ошибка в параметрах.

setlocal enabledelayedexpansion

rem Определяем путь к папке реестра
if "%~1" == "" exit /b 87
set reg_key=hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
if not "%2" == "" set reg_key=\\%~2\%reg_key%

rem Перебираем установленные программы
for /F %%i in ('reg query "%reg_key%"') do (
  reg query "%%i" /v "DisplayName" 2>&1 | findstr /I "%~1" >nul
  if "!errorlevel!" == "0" echo '%~1' program installed. && exit /b 0
) 
echo '%~1' program not found && exit /b 2
Параметры запуска описаны в комментариях. Например, при таком запуске:

Код: Выделить всё

check-app-pc.cmd KB2570791 ws_alex
будет выполнена проверка, установлено ли обновление KB2570791 (viewtopic.php?f=6&t=1957) на компьютере WS_ALEX. Вывод командного файла будет 'KB2570791' program installed или 'KB2570791' program not found, также код возврата будет 0 или другой.

Теперь можно автоматизировать работу этого командного файла, добавив проверку большего количества компьютеров по списку. Для этого создаём командный файл check-app-pclist.cmd с циклом, перебирающим строчки текстового файла с сетевыми именами компьютеров.

Код: Выделить всё

@echo off
rem %1 Полное название программы или часть названия программы.
rem %2 Имя файла со списком компьютеров.
rem Примечание: этот командный файл использует check-app-pclist.cmd

if "%~1" == "" exit /b 87
if not exist %2 exit /b 2

for /F %%a in (%2) do (
  echo %%a...
  call check-app-pc.cmd %1 %%a
)
Пример списка файлов pc.list

Код: Выделить всё

SERVER_DB
SERVER_FILES
WS_ALEX
WS_RECEPTION
Теперь запускаем командный файл, передав ему этот список:

Код: Выделить всё

check-app-pclist.cmd KB2570791 pc.list
Командный файл проверит, установлено ли обновление KB2570791 на каждом компьютере, перечисленном в файле pc.list.
nhutils
Сообщения: 595
Зарегистрирован: 09 дек 2009, 18:08
Контактная информация:

Re: Список установленных программ (CMD)

Сообщение nhutils »

Информация перенесена в формат блога:
Список установленных программ по сети
Закрыто