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

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

Ответить
Настройки темы
CMD/BAT - Как найти часть записи в реестре и запустить её значение с помощью BAT

Старожил


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


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

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


Дело вот в чём, нужно найти запись в реестре в разделе Uninstall \ NIS в графе UninstallString и запустить её значение, как это можно сделать

Отправлено: 22:29, 09-07-2012

 

Ветеран


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

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


Valek271183, а через установку и удаление программ не удаляется?

Отправлено: 22:52, 09-07-2012 | #2



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

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


Старожил


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

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


Нее, нужно чтобы при обнаружении определенной программы предлагалось удалить её, но так как пути в графе UninstallString разные, нужно как-то это автоматизировать

Отправлено: 22:58, 09-07-2012 | #3


Ветеран


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

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


Valek271183, выложите образец содержимого:
Код: Выделить весь код
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS
в виде файла реестра.

Отправлено: 01:19, 10-07-2012 | #4


Старожил


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

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


нужная строчка вот
"UninstallString"="C:\\Program Files (x86)\\NortonInstaller\\{0C55C096-0F1D-4F28-AAA2-85EF591126E7}\\NIS\\562C4DD5\\19.7.1.5\\InstStub.exe /X /ARP"

но путь в ней {0C55C096-0F1D-4F28-AAA2-85EF591126E7} на разных компьютерах разный, т.к. разные версии

Отправлено: 01:23, 10-07-2012 | #5


Ветеран


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

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


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

Попробуйте так (скрипт VBScript):
Код: Выделить весь код
Option Explicit

Const HKEY_LOCAL_MACHINE = &H80000002

Dim strComputer
Dim strValue
Dim lngProcessID

strComputer = "."

With WScript.CreateObject("WbemScripting.SWbemLocator")
	If .ConnectServer(strComputer, "root\default").Get("StdRegProv").GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS", "UninstallString", strValue) = 0 Then
		If .ConnectServer(strComputer, "root\cimv2").Get("Win32_Process").Create(strValue, Empty, Nothing, lngProcessID) = 0 Then
			WScript.Echo "Process [" & strValue & "] (PID:" & lngProcessID & ") executing successfully"
		Else
			WScript.Echo "Can't execute process [" & strValue & "]"
		End If
	Else
		WScript.Echo "Can't find parameter [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS\UninstallString]"
	End If
End With

WScript.Quit 0
Можете добавить его в политику (тогда закомментируйте все «WScript.Echo» или добавьте параметр «//b»). Можете, слегка модифицировав, просто перебрать в цикле все потребные машины, исполняя скрипт на своём компьютере.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:04, 10-07-2012 | #6


Старожил


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

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


Iska, как изменить так что бы не найдя раздела в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS\UninstallString
переходил в раздел 64 битных OS HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\NIS\UninstallString и выполнял действие там
Заранее спасибо!!!

Отправлено: 21:28, 10-07-2012 | #7


Ветеран


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

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


Valek271183, а NIS, случайно, не использует ли технологию Windows Installer? Т.е., не присутствует ли он в этом:
Код: Выделить весь код
wmic.exe Product
списке?

Отправлено: 13:11, 23-07-2012 | #8


Старожил


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

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


нет, в списке его нет

Отправлено: 14:03, 23-07-2012 | #9


Пользователь


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

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


С помощью этого скрипта ищу и удаляю все что нужно
Изучите и переделайте под свои нужды
написано на скору руку
вроде работает и нормуль
Оптимизацией кода и работу русским языком не проверял пока - руки не дошли

Доработал малость и немного окультурил

@echo off
break off
setlocal enableextensions enabledelayedexpansion

if -%1 == - goto missparam
if /I -%1 == --MTX goto begin
if /I -%1 == --MTR goto begin
if /I -%1 == --MNTX goto begin
if /I -%1 == --MNTR goto begin
if /I -%1 == --MX goto begin
if /I -%1 == --MR goto begin
if /I -%1 == --TX goto begin
if /I -%1 == --TR goto begin
if /I -%1 == --NTX goto begin
if /I -%1 == --NTR goto begin
if /I -%1 == --X goto begin
if /I -%1 == --R goto begin
if /I -%1 == --F goto begin
goto missparam

:begin
if -%2 == - goto missparam
set COMD=%1
for /f "tokens=1*" %%i in ("%*") do set STR=%%j
if "-%STR%" == "-" goto missparam

del /f/q UninstallTemplate.cmd >nul 2>nul
del /f/q RepairTemplate.cmd >nul 2>nul
del /f/q "%STR%_UninstallTemplate.cmd" >nul 2>nul
del /f/q "%STR%_RepairTemplate.cmd" >nul 2>nul

for /f "tokens=*" %%i in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall"') do call :cmpr "%%i"
if %PROCESSOR_ARCHITECTURE%==AMD64 for /f "tokens=*" %%i in ('reg query "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"') do call :cmpr "%%i"
del /f/q "regfind.tmp" >nul 2>nul
goto exit

:cmpr
set PRODCOD=
set REPAIRSTR=
set UNINSSTR=
set INSTDIR=
set DSPNAM=
set DSPVER=

if /I -%COMD% == --F title Find "%STR%" in: %1
reg query %1 >"regfind.tmp" 2>nul

find /I "%STR%" "regfind.tmp" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
reg query %1 >"regfind.tmp" 2>nul
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "DisplayName" "regfind.tmp"') do set DSPNAM=%%k
for /f "skip=2 tokens=1,2,3 delims= " %%i in ('find /I "DisplayVersion" "regfind.tmp"') do set DSPVER=%%k
for /f "skip=2 tokens=3" %%i in ('find /I "DisplayVersion" "regfind.tmp"') do set DSPVER=%%i
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "InstallLocation" "regfind.tmp"') do set INSTDIR=%%k
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "QuietUninstallString" "regfind.tmp"') do set UNINSSTR=%%k
find /I "QuietUninstallString" "regfind.tmp" >nul 2>nul
if -%errorlevel% == -0 goto noustr
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "UninstallString" "regfind.tmp"') do set UNINSSTR=%%k
:noustr
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "RepairString" "regfind.tmp"') do set REPAIRSTR=%%k
for /f "tokens=1" %%i in ("%UNINSSTR%") do set UNINSTALLER=%%~i
if /I "%DSPNAM%" == "" goto :eof
echo Finded "%STR%" in: %1
if not "-%DSPVER%" == "-" echo %DSPNAM% - Version: %DSPVER%
if not "-%INSTDIR%" == "-" echo Installed in: %INSTDIR%
if /I "%UNINSTALLER%" == "MsiExec.exe" goto msin
if /I "%UNINSTALLER%" == "MsiExec" goto nomsin
goto nomsin

:msin
for /f "tokens=1,2 delims={" %%i in ("%UNINSSTR%") do set PRODCOD={%%j
for /f "tokens=1 delims= " %%i in ("%PRODCOD%") do set PRODCOD=%%i
set UNINSSTR=MSIEXEC /X %PRODCOD% /passive /norestart
set REPAIRSTR=MSIEXEC /faums %PRODCOD% /passive /norestart
echo Uninstaller: %UNINSTALLER%
echo Product Code: %PRODCOD%

:nomsin
rem Remove command.
echo Uninstall string: %UNINSSTR%
echo Repair string: %REPAIRSTR%
for /f "tokens=1 delims=-" %%i in ("%COMD%") do set COOMD=%%i
echo User command: -%COOMD%
if /I "-%COMD%" == "--F" goto :eof
if Defined COMD call :%COOMD%
goto quit

:MTX
echo %UNINSSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"%STR%_UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"%STR%_UninstallTemplate.cmd"
echo.
goto :eof

:MTR
echo %REPAIRSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"%STR%_RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"%STR%_RepairTemplate.cmd"
echo.
goto :eof

:MNTX
echo %UNINSSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"UninstallTemplate.cmd"
echo.
goto :eof

:MNTR
echo %REPAIRSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"RepairTemplate.cmd"
echo.
goto :eof

:MX
echo %UNINSSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo Uninstall: %PRODCOD%:
start /wait "" %UNINSSTR%
goto :eof

:MR
echo %REPAIRSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo Repair: %PRODCOD%:
start /wait "" %REPAIRSTR%
goto :eof

:TX
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"%STR%_UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"%STR%_UninstallTemplate.cmd"
echo.
goto :eof

:TR
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"%STR%_RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"%STR%_RepairTemplate.cmd"
echo.
goto :eof

:NTX
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"UninstallTemplate.cmd"
echo.
goto :eof

:NTR
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"RepairTemplate.cmd"
echo.
goto :eof

:X
echo Uninstall: %PRODCOD%:
start /wait "" %UNINSSTR%
goto :eof

:R
echo Repair: %PRODCOD%:
start /wait "" %REPAIRSTR%
goto :eof

:missparam
echo Error: Parameter missing.
echo Usage:
echo Find and Gen Uninstall script {string}_UninstallTemplate.cmd (MSI only): RegFindUninstall.cmd -MTX {string}
echo Find and Gene Repair script {string}_RepairTemplate.cmd (MSI only): RegFindUninstall.cmd -MTR {string}
echo Find and Gen Uninstall script for {string} UninstallTemplate.cmd (MSI only): RegFindUninstall.cmd -MNTX {string}
echo Find and Gen Repair script for {string} RepairTemplate.cmd (MSI only): RegFindUninstall.cmd -MNTR {string}
echo Find and Uninstall {string} (MSI only): RegFindUninstall.cmd -MX {string}
echo Find and Repair {string} (MSI only): RegFindUninstall.cmd -MR {string}
echo Find and Gen Uninstall script {string}_UninstallTemplate.cmd: RegFindUninstall.cmd -TX {string}
echo Find and Gen Repair script {string}_RepairTemplate.cmd: RegFindUninstall.cmd -TR {string}
echo Find and Gen Uninstall script for {string} UninstallTemplate.cmd: RegFindUninstall.cmd -NTX {string}
echo Find and Gene Repair script for {string} RepairTemplate.cmd: RegFindUninstall.cmd -NTR {string}
echo Find and Uninstall {string}: RegFindUninstall.cmd -X {string}
echo Find and Repair {string}: RegFindUninstall.cmd -R {string}
echo Find {string} and display uninstall parameters: RegFindUninstall.cmd -F {string}
echo.

:exit
timeout 5 >nul 2>nul

:quit

Последний раз редактировалось NoIZz, 27-07-2012 в 18:07.


Отправлено: 17:41, 26-07-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление параметра в реестре где значение переменная RoNiBu Скриптовые языки администрирования Windows 8 24-02-2012 19:18
Разное - Значение в реестре одной строкой MKN Microsoft Windows 2000/XP 7 26-11-2010 08:51
Разное - [решено] У переменной System в реестре пустое значение. SANIOK_AV Microsoft Windows 2000/XP 2 31-01-2010 12:50
Интерфейс - [решено] Как изменить значение в реестре DeMoN23 Microsoft Windows 2000/XP 2 24-02-2009 13:52
Значение параметра в реестре WinME Guest Microsoft Windows 95/98/Me (архив) 3 07-10-2004 15:26




 
Переход