Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
1

Удаление ПО с командной строки

11.02.2019, 14:16. Просмотров 1132. Ответов 17

Добрый день ,
подскажите , для оптимизации и всевозможных ситуаций . прошу помочь в обьединении
кода ниже. для удалении ПО , в данном случае Nod,

Проблематика состоит в том что у меня есть на одних тачках , один пароль, а на некоторых другой пароль на удаление
, и есть тачки Нодом другой версии , т.е запись wmic в системе отличается. , соответственно поиск выполняется по другому выражению

На вопрос , почему в коде используется полное название пакета, Пробовал сокращенно , типа просто вместо ESET Endpoint Antivirus написать Antivirus, не канает, он сравнивание не проходит...
есть интересная статья на Хабре , пробовал вариант их, у меня вообще ничего не удалило

ХАБР ССЫЛКА
вариант с 1м. паролем
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
setlocal enableextensions enabledelayedexpansion
set strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set strKeys=%strHive%\%%i
for /f "tokens=7 delims=" %%i in ('reg query %strHive% ^| findstr {') do (
for /f "skip=2 tokens=2,*" %%j in ('reg query %strKeys% /v DisplayName') do (
if "%%k"=="ESET Endpoint Antivirus" set strKey=%%i ) )
msiexec  /qb REBOOT="ReallySuppress" PASSWORD="12345" /promptrestart /x%strKey% /l+*v %temp%\uninstall.log
С другим паролем эта же запись
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
setlocal enableextensions enabledelayedexpansion
set strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set strKeys=%strHive%\%%i
for /f "tokens=7 delims=" %%i in ('reg query %strHive% ^| findstr {') do (
for /f "skip=2 tokens=2,*" %%j in ('reg query %strKeys% /v DisplayName') do (
if "%%k"=="ESET Endpoint Antivirus" set strKey=%%i ) )
msiexec  /qb REBOOT="ReallySuppress" PASSWORD="54321" /promptrestart /x%strKey% /l+*v %temp%\uninstall.log
И запись с другим названием продукта ,wmic, но пароль совпадает как во второй записи
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
setlocal enableextensions enabledelayedexpansion
set strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set strKeys=%strHive%\%%i
for /f "tokens=7 delims=" %%i in ('reg query %strHive% ^| findstr {') do (
for /f "skip=2 tokens=2,*" %%j in ('reg query %strKeys% /v DisplayName') do (
if "%%k"=="ESET NOD32 Antivirus" set strKey=%%i ) )
msiexec  /qb REBOOT="ReallySuppress" PASSWORD="54321" /promptrestart /x%strKey% /l+*v %temp%\uninstall.log
Подскажите как обьеденить 3 разных ситуации в один Батник?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2019, 14:16
Ответы с готовыми решениями:

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

Возврат каретки и перевод строки в приглашении Командной строки
В строке приглашения MS-DOS после вывода всей информации перейти на новую строчку. как это сделать?

Удаление\скрытие строк с путями\командами в командной строке
День добрый. Давно меня мучает данный вопрос, но всё никак не находил ответа на него. Реально ли...

Сканирование из командной строки
Всем привет! Скачал программу CmdTwain для сканирования из консоли, все классно, научился...

Ошибка командной строки
когда пытаюсь удалить файл используу реестр ...

17
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
12.02.2019, 01:14 2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
set "strKeys=%strHive%\%%i"
 
setlocal enableextensions enabledelayedexpansion
 for /f "tokens=7 delims=" %%i in ('reg query %strHive% ^| findstr {') do (
  for /f "skip=2 tokens=2*" %%j in ('reg query %strKeys% /v DisplayName') do (
   echo "%%k"|>nul find "ESET" && set "strKey=%%i"
  )
 )
 for %%a in ("12345" "54321") do msiexec /qb REBOOT="ReallySuppress" PASSWORD="%%~a" /promptrestart /x%strKey% /l+*v %temp%\uninstall.log
endlocal
 
pause
1
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
13.02.2019, 13:50  [ТС] 3
только сегодня протестил, Возможно не совсем корректный вариант, т.к с включенным echo ,
видно что нет поиска...

Вот какой результат
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
D:\>set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
 
D:\>set "strKeys=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%i"
 
D:\>setlocal enableextensions enabledelayedexpansion
 
D:\>for /F "tokens=7 delims=" %i in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | findstr {') do (for /F "skip=2 tokens=2*" %
j in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%i /v DisplayName') do (echo "%k"  | find "ESET"  1>nul  && set "strKey=%i"
) )
 
D:\>for %a in ("12345" "54321") do msiexec /qb REBOOT="ReallySuppress" PASSWORD="%~a" /promptrestart /x /l+*v C:\WinTemp\uninstall.log
 
D:\>msiexec /qb REBOOT="ReallySuppress" PASSWORD=12345" /promptrestart /x /l+*v C:\WinTemp\uninstall.log
 
-------  
ошибка такая 
 
Windows installer
Не удается отурыть пакет установки. Убедитесь что пакет существует и к нему есть доступ.........
 
нажимаем ok!  и ошибка для второй строки с таким-же окном.
 
 
D:\>msiexec /qb REBOOT="ReallySuppress" PASSWORD="54321" /promptrestart /x /l+*v C:\WinTemp\uninstall.log
----------------

Судя по окну cmd он проверку по реестру вообще не производит
.
Запускал мой отдельный кусок варианта , он работает...

Добавлено через 2 часа 50 минут
Цитата Сообщение от alpap Посмотреть сообщение
echo "%%k"|>nul find "ESET"
Возможно этот кусок не отрабатывается ?.
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
13.02.2019, 21:37 4
а так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
 
for /f "tokens=7 delims=" %%a in ('reg query "%strHive%"^|findstr {') do (
 for /f "skip=2 tokens=2*" %%j in ('reg query "%strHive%\%%a" /v DisplayName') do (
  echo "%%k"|>nul find "ESET" && set "strKey=%%a"
 )
)
for %%a in ("12345" "54321") do msiexec /qb REBOOT="ReallySuppress" PASSWORD="%%~a" /promptrestart /x%strKey% /l+*v %temp%\uninstall.log
 
pause
еще покажите мне вывод "%%k"
Кликните здесь для просмотра всего текста

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
 
for /f "tokens=7 delims=" %%a in ('reg query "%strHive%"^|findstr {') do (
 for /f "skip=2 tokens=2*" %%j in ('reg query "%strHive%\%%a" /v DisplayName') do (
  echo "%%k">"file.txt"
 )
)
pause
и точное написание и возможные варианты строк:
"ESET Endpoint Antivirus"
"ESET NOD32 Antivirus"
0
vavun
9866 / 5235 / 802
Регистрация: 07.04.2013
Сообщений: 15,192
14.02.2019, 01:17 5
https://support.eset.com/kb2289
0
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
14.02.2019, 11:05  [ТС] 6
Цитата Сообщение от vavun Посмотреть сообщение
https://support.eset.com/kb2289
Я не пойму к чему вы эту ссылку прикрепили, она не по теме, так как в данном варианте рассматривается объединение трех разных ситуаций в один..

Добавлено через 20 минут
Цитата Сообщение от alpap Посмотреть сообщение
еще покажите мне вывод "%%k"
Спасибо что пересмотрели, изменения кода не помогло . в данном варианте
не создает текстовик, я так понимаю вы думаете что он экспортирует записи реестра инсталяционных wmic в файл ?

Вот в принципе текстовка cmd с включенным echo
Кликните здесь для просмотра всего текста

D:\>set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

D:\>for /F "tokens=7 delims=" %a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"|findstr {') do (for /F "skip=2 tokens=2*" %
j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%a" /v DisplayName') do (echo "%k" 1>"file.txt" ) )

D:\>pause
Для продолжения нажмите любую клавишу . . .
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
14.02.2019, 15:11 7
magarjoba,
не понимаете.
мне нужно содержимое переменной %%k, я специально написал
Цитата Сообщение от alpap Посмотреть сообщение
...echo "%%k">"file.txt"
что теперь в файле "file.txt"?

Добавлено через 2 минуты
даже лучше так сделайте: ...echo "%%k">>"file.txt"
0
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
14.02.2019, 15:18  [ТС] 8
Цитата Сообщение от alpap Посмотреть сообщение
echo "%%k">>"file.txt"

Если с 3мя точками то пусто ,

если без точек , то такое содержимое.

"%k"
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
14.02.2019, 15:19 9
magarjoba,
вы издеваетесь ?!
вывод этого
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
 
for /f "tokens=7 delims=" %%a in ('reg query "%strHive%"^|findstr {') do (
 for /f "skip=2 tokens=2*" %%j in ('reg query "%strHive%\%%a" /v DisplayName') do (
  echo "%%k">>"file.txt"
 )
)
pause
0
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
14.02.2019, 15:41  [ТС] 10
Цитата Сообщение от alpap Посмотреть сообщение
вы издеваетесь ?!
вывод этого
Я же в прошлый раз написал , даже не создается текстовый файл,
на всякий случай еще раз протестил, ничего не происходит

Добавлено через 5 минут
Цитата Сообщение от magarjoba Посмотреть сообщение
еще раз протестил
Проверил на разных ОС, и на win 10 и на XP
0
vavun
9866 / 5235 / 802
Регистрация: 07.04.2013
Сообщений: 15,192
14.02.2019, 16:11 11
Цитата Сообщение от magarjoba Посмотреть сообщение
Я не пойму к чему вы эту ссылку прикрепили, она не по теме
Почему универсальный фирменный деинсталятор "не по теме", а попытка реализовать на костылях батниках тот же функционал "по теме" ?
0
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
14.02.2019, 17:02  [ТС] 12
Цитата Сообщение от vavun Посмотреть сообщение
универсальный фирменный деинсталятор
А каким образом его можно запустить не в домене на кучу компов, не трогая руки пользователя?
никак, поэтому, я лучше буду использовать Не костыль, а стандартную методику удаления , только вызову wmic
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
14.02.2019, 19:52 13
Лучший ответ Сообщение было отмечено magarjoba как решение

Решение

Цитата Сообщение от magarjoba Посмотреть сообщение
даже не создается текстовый файл ..., ничего не происходит
странно, тоже самое
Цитата Сообщение от magarjoba Посмотреть сообщение
ХАБР ССЫЛКА
вариант с 1м. паролем
у вас ведь работало.
Понял. magarjoba, как Хабр-то читали? Пропустили "\" в for /f "tokens=7 delims=тут" %%i in ('...
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
set "strHive=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
set "z=ESET"
set "ps="12345" "54321""
 
for /f "tokens=7 delims=\" %%A in ('reg query "%strHive%"^|find "{"') do (
 for /f "skip=2 tokens=2*" %%a in ('reg query "%strHive%\%%A" /v DisplayName') do call :# "%%b" "%%A" "%z%" "%ps%"
)
pause& exit
 
:#
 echo "%~1"|>nul find "%~3" && (
  for %%a in (%~4) do msiexec  /qb REBOOT="ReallySuppress" PASSWORD="%%~a" /promptrestart /x%~2 /l+*v %temp%\uninstall.log
 )
exit /b
возможно надо поэкспериментировать с [set "z=ESET"] или поменять на findstr ... , если find "%~3" не будет находить требуемые строки.
1
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
15.02.2019, 10:59  [ТС] 14
Цитата Сообщение от alpap Посмотреть сообщение
возможно надо поэкспериментировать с [set "z=ESET"] или поменять на findstr ... , если find "%~3" не будет находить требуемые строки.
да протестил, данный вариант работает
Цитата Сообщение от alpap Посмотреть сообщение
как Хабр-то читали?
ну как, я то скрипт брал не с Хабра , а с год нашел на ресурсе 100 летней давности...))
и еще вопрос, на Хабре в статье есть строка
Windows Batch file
1
if %ERRORLEVEL% NEQ 0 echo Uninstallation failed
, гипотетически возможно ли сделать так, что-бы если я буду выполнять батник удаленно, не контролируя его
то например при не правильном пароле он может висеть в окне типа нажмите кнопку ок..,
после чего попробует вариант поиска с другим паролем
Я, сейчас конечно потесчу, но для уточнения лучше спрошу у вас...
0
magarjoba
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 76
15.02.2019, 11:55  [ТС] 15
Цитата Сообщение от alpap Посмотреть сообщение
возможно надо поэкспериментировать
Удаление ПО с  командной строки


Получается как я и думал . т.к у нас несколько паролей в коде, Получается Успешный экземпляр с паролем автоматически
закрывается . а вот другой вызов с неправильным паролем , весит в процессах ((

я скриншот прикрепил
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
15.02.2019, 15:16 16
надо знать как действует msiexec, чтобы понимать как действовать мне
или достаточно: echo y|msiexec ...
или if %errorlevel%==1 что делать? Убить процесс msiexec?
или может есть ключи, позволяющие msiexec проглотить ошибку и работать далее.
0
FlasherX
867 / 396 / 145
Регистрация: 06.06.2017
Сообщений: 1,521
15.02.2019, 16:41 17
Цитата Сообщение от alpap Посмотреть сообщение
или достаточно: echo y|msiexec ...
msiexec — это GUI. Такие фокусы не пройдут.
Цитата Сообщение от alpap Посмотреть сообщение
или может есть ключи, позволяющие msiexec проглотить ошибку
Ничего не мешает выполнить msiexec и почитать. /quiet и /qn скроют процесс, но ошибки никуда не денутся.
0
alpap
1817 / 1333 / 435
Регистрация: 26.04.2015
Сообщений: 4,569
15.02.2019, 22:28 18
FlasherX, угу
magarjoba, а когда вы запускали отдельными кодами но с разными паролями вы к чему привязывали пароли, ведь не было ошибок в таком случае.
0
15.02.2019, 22:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2019, 22:28

Файл для командной строки
Добрый день. Не судите строго, но не знаю с какой стороны подступиться. Подскажите, существует ли...

Контроль верности командной строки
@echo off FOR %%F IN (TXT DOC) DO XCOPY /s /d pk1\*.%%F pk2\ if %errorlevel% echo Dlya...

Программное закрытие командной строки
Всем привет! Есть BAT файл, который запускает другой CMD-файл. По завершению выполнения cmd-файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru