|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск слова в строке из реестра |
|
|
CMD/BAT - Поиск слова в строке из реестра
|
Новый участник Сообщения: 14 |
Доброго времени суток всем. Есть скрипт:
echo on cls for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName ^| find "ProductName"') do set ProductName=%%b if "%ProductName%" == "Windows Server 2008 R2 Datacenter" goto noconfig if "%ProductName%" == "Windows Server 2008 R2 Enterprice" goto noconfig if "%ProductName%" == "Windows Server 2008 R2 Standart" goto noconfig if "%ProductName%" == "Microsoft Windows Server 2003" goto noconfig if "%ProductName%" == "Microsoft Windows XP" goto config if "%ProductName%" == "Windows 7 Ultimate" goto config if "%ProductName%" == "Windows 7 Enterprise" goto config if "%ProductName%" == "Windows 7 Professional" goto config if "%ProductName%" == "Windows 7 Home Premium" goto config if "%ProductName%" == "Windows 7 Home Basic" goto config if "%ProductName%" == "Windows 7 Starter" goto config :noconfig echo Config do not need @pause exit :config @echo AutoConfiguration Lan DHCP Script echo config work @pause Части конфиг и но конфиг пока тестовые, для проверки работы первого условия ![]() P.S. Совсем не силен в программировании, по возможности, не кидайтесь помидорами ![]() Заранее спасибо. |
|
Отправлено: 14:08, 22-03-2017 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать |
Отправлено: 14:35, 22-03-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Забанен Сообщения: 793
|
Не проще ли вообще брать данные из HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions (значение ProductType)? Там возвожны только три значения: WinNT, LanmanNT и Server.
|
Отправлено: 14:53, 22-03-2017 | #3 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать greg zakharov,
Спасибо за подсказку. При таком раскладе подойдет и уже существующий, работающий скрипт ![]() Elven, Это работает, он правильно определяет и выдает config\noconfig. Только теперь у меня проблемы с тем, как дальше сказать скрипту уходить в шаг :config или :noconfig... Если слово сервер найдено, то переменной надо присвоить значение сервер, если нет, то например 1 и в соответствии со значением переменной идти в следующий шаг. Вот только реализовать это в коде у меня не получается... Пните ещё немного дальше? |
Отправлено: 06:59, 23-03-2017 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Сиволапый:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "ProductName" | findstr /i server && ( rem Здесь код для noconfig … ) || ( rem Здесь код для config … ) Но, если очень уж хочется — используйте call :Метка или goto :Метка. |
||
Отправлено: 08:58, 23-03-2017 | #5 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать А не могли бы Вы обьяснить логику работы?
![]() ![]() reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "ProductName" | findstr /i server - выполняется вот эта часть кода, допустим слово найдено. && - это значит, насколько мне известно, что то что стоит после этого, будет выполняться только если успешно выполнилось то, что стоит перед этим. call :noconfig || call :config - дальше идет это, т.е. :конфиг будет выполняться только тогда, когда :ноконфиг выполниться не смог... А как машина понимает, когда ей выполнять конфиг а когда ноконфиг? Ведь никаких переменных явно заданных которые бы говорили что если значение такое, делай так, если другое, эдак, нет... |
Отправлено: 08:08, 24-03-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Сиволапый:
Цитата Сиволапый:
ЕСЛИ findstr.exe вернул нулевой код возврата ТО Вызывать процедуру по метке :noconfig ИНАЧЕ Вызывать процедуру по метке :config КОНЕЦЕСЛИ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "ProductName" | findstr /i server if %errorlevel% equ 0 ( rem Здесь код для noconfig … ) else ( rem Здесь код для config … ) |
||
Последний раз редактировалось Iska, 24-03-2017 в 10:20. Причина: Дополнение; описка с точкой вместо запятой. Отправлено: 08:43, 24-03-2017 | #7 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Iska,
Спасибо |
Отправлено: 10:08, 24-03-2017 | #8 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать В общем у меня получился вот такой вариант:
echo on reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "ProductName" | findstr /i server && call :noconfig || call :config :noconfig echo Config do not need exit :config @ECHO ON set dir=%\\172.16.10.12\PolicyInstall\ @cls @ECHO ON @If exist "%programfiles%/TightVNC" ( @echo Done! ) else ( @If exist "%programfiles(x86)%" ( @echo Installing: TightVNC x 64 @"%dir%tightvnc-2.8.5-gpl-setup-64bit.msi" /quiet ) else ( @echo Installing: TightVNC x 32 @"%dir%tightvnc-2.8.5-gpl-setup-32bit.msi" /quiet ) reg.exe import "%dir%vncsrv.reg" net stop "TightVNC Server" && net start "TightVNC Server" @echo Done! ) exit @echo on @for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName ^| find "ProductName"') do set ProductName=%%b @reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "ProductName" | findstr /i server && call :noconfig || call :config :noconfig @echo Config do not need @exit :config @ECHO ON @If exist "%programfiles%/TightVNC" ( @echo Done! @pause @exit ) @set dir=%\\172.16.10.12\PolicyInstall\ @If "%ProductName%" == "Microsoft Windows XP" ( @echo Installing: TightVNC x 32 @xcopy "%dir%*.msi*" "%temp%/*.msi" /q /y /c @"%temp%/tightvnc-2.8.5-gpl-setup-32bit.msi" /quiet reg.exe import "%dir%vncsrv.reg" net stop "TightVNC Server" && net start "TightVNC Server" @echo Done! @pause @exit ) @If exist "%programfiles(x86)%" ( @echo Installing: TightVNC x 64 @"%dir%tightvnc-2.8.5-gpl-setup-64bit.msi" /quiet ) ( @echo Installing: TightVNC x 32 @"%dir%tightvnc-2.8.5-gpl-setup-32bit.msi" /quiet ) reg.exe import "%dir%vncsrv.reg" net stop "TightVNC Server" && net start "TightVNC Server" @echo Done! ) @pause exit ![]() P.S. Паузы я понавставлял для проверки. В скрипте который на доменном контроллере пауз нету... |
Отправлено: 08:41, 27-03-2017 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Сиволапый:
Не проще ли вместо всего этого просто назначить msi пакеты для установки посредством той же групповой политики, а из файла реестра либо сделать шаблон неуправляемой групповой политики и настроить последнюю, либо же раздавать значения из этого файла реестра предпочтениями групповой политики? |
|
Отправлено: 09:32, 27-03-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - Поиск в AD по строке из внешнего файла. | Gluteus Maximus | Скриптовые языки администрирования Windows | 1 | 03-09-2015 10:08 | |
VBS/WSH/JS - поиск слова в тексте и вывод части текста после искомого слова | sergey23031978 | Скриптовые языки администрирования Windows | 9 | 18-02-2015 16:54 | |
Разное - Программа для удаления нужного слова из всех веток реестра одним кликом. | Smorvel | Программное обеспечение Windows | 5 | 07-11-2013 13:39 | |
CMD/BAT - [решено] Поиск слова в последней строке | support23 | Скриптовые языки администрирования Windows | 5 | 16-08-2012 13:04 | |
[решено] PHP, определение слова в строке | foma24 | Вебмастеру | 3 | 30-05-2012 15:35 |
|