|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как найти и изменить параметр реестра не зная где он находится |
|
|
VBS/WSH/JS - [решено] Как найти и изменить параметр реестра не зная где он находится
|
Пользователь Сообщения: 61 |
Профиль | Отправить PM | Цитировать
Всем привет!
Помогите кто может.Нужно найти параметр реестра в ветке HKLM не зная полного пути к нему и создать переменную с полным путём к этому параметру.В пути к параметру есть {SID} который меняется при переустановке Windows и на каждом компьютере он тоже разный.Нашёл несколько скриптов в интернете. "Скрипт 1" - не работает с REG_BINARY но с SZ и DWORD работает. "Скрипт 2" - работает с BINARY но не знаю как написать поиск пути к параметру и создание переменной. Пытался объединить оба скрипта не вышло. Скрипт 1 Option Explicit Dim SectionName Dim tmpRegFile Dim FindValue Dim AddValue Dim objWSS Dim objFSO Dim RegFile Dim CurrSection Dim GetLine Dim KeyName Dim strPrompt Dim ReturnValue SectionName = "HKEY_CURRENT_USER\Software" tmpRegFile = "z:\tmp.reg" FindValue = "Строка поиска" AddValue = "Строка замены" Set objWSS = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") objWSS.Run "regedit /e " & tmpRegFile & " """ & SectionName & """", 2, True Set RegFile = objFSO.OpenTextFile(tmpRegFile, 1, True, -1) Do While RegFile.AtEndOfStream <> True GetLine = RegFile.ReadLine If Left(GetLine, 6) = "[HKEY_" Then CurrSection = Mid(GetLine, 2, Len(GetLine) - 2) Else If InStr(GetLine, FindValue) Then strPrompt = "Вы желаете заменить значение ключа " & GetLine & vbNewLine & _ "в разделе " & CurrSection & vbNewLine & _ "на значение """ & AddValue & """?" ReturnValue = MsgBox(strPrompt, 35, "Замена в реестре") If ReturnValue = 6 Then KeyName = Replace(Split(GetLine, "=")(0), """", "") If KeyName = "@" Then KeyName = "" objWSS.RegWrite CurrSection & "\" & KeyName, AddValue, "REG_SZ" ElseIf ReturnValue = 2 Then Exit Do End If End If End If Loop RegFile.Close 'Следующая строка закомментирована для возможности отката изменений 'objFSO.DeleteFile tmpRegFile Set objWSS = Nothing Set objFSO = Nothing MsgBox "Скрипт завершил работу" WScript.Quit const HKEY_LOCAL_MACHINE = &H80000002 FindValue = "{4b361010-def7-43a1-a5dc-071d955b62f7},15" strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{75a38608-57f5-412d-a267-62e7cce381c1}\FxProperties" AddValue = Array(&H41,&H00,&Hf8,&H73,&H01,&H00,&H00,&H00,&Hfc,&Hff,&Hff,&Hff,&Hf8,&Hff,&Hff,&Hff,&Hf6,&Hff,&Hff,&Hff,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&Hfa,&Hff,&Hff,&Hff,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00) Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath, "{4b361010-def7-43a1-a5dc-071d955b62f7},15",AddValue |
|
Отправлено: 15:55, 09-02-2014 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Значения параметров "{4b361010-def7-43a1-a5dc-071d955b62f7},14"
"{4b361010-def7-43a1-a5dc-071d955b62f7},15" "{4b361010-def7-43a1-a5dc-071d955b62f7},16" Если это просто поиск я могу убрать вывод сообщения из этого скрипта и объединить со вторым скриптом из шапки чтобы менялись значения в параметрах? |
Отправлено: 09:00, 17-02-2014 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Разве Вы говорили что-либо про изменение параметров? Вы писали:
Цитата krot183:
Так Вам что на самом деле нужно сделать? |
|
Отправлено: 09:08, 17-02-2014 | #22 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Iska, Изменить значения в параметрах.Спасибо.Я вроде понял как это сделать. Прийду с работы попробую и отпишусь.
|
Отправлено: 09:11, 17-02-2014 | #23 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата krot183:
2. На что именно изменить? |
|
Отправлено: 09:27, 17-02-2014 | #24 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Iska, Вот что и на что надо изменить
"{4b361010-def7-43a1-a5dc-071d955b62f7},14"=dword:00000001 "{4b361010-def7-43a1-a5dc-071d955b62f7},16"=hex:41,00,f8,73,01,00,00,00,00,00,\ 00,00,f4,01,00,00,f4,01,00,00,f4,01,00,00,00,00,00,00,f4,01,00,00,f4,01,00,\ 00,4a,01,00,00,4a,01,00,00 "{4b361010-def7-43a1-a5dc-071d955b62f7},15"=hex:41,00,f8,73,01,00,00,00,fc,ff,\ ff,ff,f8,ff,ff,ff,f6,ff,ff,ff,00,00,00,00,00,00,00,00,fa,ff,ff,ff,00,00,00,\ 00,00,00,00,00 |
Отправлено: 10:32, 17-02-2014 | #25 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Iska, Огромное спасибо! Всё получилось.Вот что у меня вышло
Option Explicit Const HKEY_LOCAL_MACHINE = &H80000002 Dim strComputer Dim strKey Dim arrParameters Dim objSWbemLocator Dim objSWbemServicesEx Dim objSWbemObjectEx Dim arrSubKeys Dim strSubKey Dim objRegExp Dim arrParameter Dim lngValue Dim arrValues Dim boolFound Dim strResult Dim AddValue1 Dim AddValue2 Dim AddValue3 Dim FindValue1 Dim FindValue2 Dim FindValue3 strComputer = "." strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render" FindValue1 = "{4b361010-def7-43a1-a5dc-071d955b62f7},14" FindValue2 = "{4b361010-def7-43a1-a5dc-071d955b62f7},15" FindValue3 = "{4b361010-def7-43a1-a5dc-071d955b62f7},16" AddValue1 = 1 AddValue2 = Array(&H41,&H00,&Hf8,&H73,&H01,&H00,&H00,&H00,&Hfc,&Hff,&Hff,&Hff,&Hf8,&Hff,&Hff,&Hff,&Hf6,&Hff,&Hff,&Hff,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&Hfa,&Hff,&Hff,&Hff,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00) AddValue3 = Array(&H41,&H00,&Hf8,&H73,&H01,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&Hf4,&H01,&H00,&H00,&Hf4,&H01,&H00,&H00,&Hf4,&H01,&H00,&H00,&H00,&H00,&H00,&H00,&Hf4,&H01,&H00,&H00,&Hf4,&H01,&H00,&H00,&H4a,&H01,&H00,&H00,&H4a,&H01,&H00,&H00) arrParameters = Array( _ Array("{4b361010-def7-43a1-a5dc-071d955b62f7},14", "DWORD"), _ Array("{4b361010-def7-43a1-a5dc-071d955b62f7},15", "BINARY"), _ Array("{4b361010-def7-43a1-a5dc-071d955b62f7},16", "BINARY") _ ) Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator") Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\default") Set objSWbemObjectEx = objSWbemServicesEx.Get("StdRegProv") If objSWbemObjectEx.EnumKey(HKEY_LOCAL_MACHINE, strKey, arrSubKeys) = 0 Then If Not IsNull(arrSubKeys) Then Set objRegExp = WScript.CreateObject("VBScript.RegExp") objRegExp.Pattern = "^\{[\da-fA-F]{8}(?:-[\da-fA-F]{4}){3}-[\da-fA-F]{12}}$" For Each strSubKey In arrSubKeys If objRegExp.Test(strSubKey) Then boolFound = True For Each arrParameter In arrParameters Select Case arrParameter(1) Case "DWORD" If objSWbemObjectEx.GetDWORDValue(HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", arrParameter(0), lngValue) <> 0 Then boolFound = False End If Case "BINARY" If objSWbemObjectEx.GetBinaryValue(HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", arrParameter(0), arrValues) <> 0 Then boolFound = False End If Case Else ' Not implemented End Select Next If boolFound Then strResult = "HKLM\" & strKey & "\" & strSubKey Exit For End If End If Next Set objRegExp = Nothing If Not boolFound Then WScript.Echo "Can't find any right subkey in [HKLM\" & strKey & "]." WScript.Quit 3 End If Else WScript.Echo "Nothing found in [HKLM\" & strKey & "]." WScript.Quit 2 End If Else WScript.Echo "Not found subkey [HKLM\" & strKey & "]." WScript.Quit 1 End If objSWbemObjectEx.SetDWORDValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", FindValue1, AddValue1 objSWbemObjectEx.SetBinaryValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", FindValue2, AddValue2 objSWbemObjectEx.SetBinaryValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", FindValue3, AddValue3 Set objSWbemObjectEx = Nothing Set objSWbemServicesEx = Nothing Set objSWbemLocator = Nothing WScript.Quit 0 |
Отправлено: 11:11, 17-02-2014 | #26 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Вообще-то вот так:
Option Explicit Const HKEY_LOCAL_MACHINE = &H80000002 Dim strComputer Dim strKey Dim arrParameters Dim objSWbemLocator Dim objSWbemServicesEx Dim objSWbemObjectEx Dim arrSubKeys Dim strSubKey Dim objRegExp Dim arrParameter Dim lngValue Dim arrValues Dim boolFound Dim strResult strComputer = "." strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render" arrParameters = Array( _ Array("{4b361010-def7-43a1-a5dc-071d955b62f7},14", "DWORD", 1), _ Array("{4b361010-def7-43a1-a5dc-071d955b62f7},15", "BINARY", Array(&H41,&H00,&Hf8,&H73,&H01,&H00,&H00,&H00,&Hfc,&Hff,&Hff,&Hff,&Hf8,&Hff,&Hff,&Hff,&Hf6,&Hff,&Hff,&Hff,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&Hfa,&Hff,&Hff,&Hff,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00)), _ Array("{4b361010-def7-43a1-a5dc-071d955b62f7},16", "BINARY", Array(&H41,&H00,&Hf8,&H73,&H01,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&Hf4,&H01,&H00,&H00,&Hf4,&H01,&H00,&H00,&Hf4,&H01,&H00,&H00,&H00,&H00,&H00,&H00,&Hf4,&H01,&H00,&H00,&Hf4,&H01,&H00,&H00,&H4a,&H01,&H00,&H00,&H4a,&H01,&H00,&H00)) _ ) Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator") Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\default") Set objSWbemObjectEx = objSWbemServicesEx.Get("StdRegProv") If objSWbemObjectEx.EnumKey(HKEY_LOCAL_MACHINE, strKey, arrSubKeys) = 0 Then If Not IsNull(arrSubKeys) Then Set objRegExp = WScript.CreateObject("VBScript.RegExp") objRegExp.Pattern = "^\{[\da-fA-F]{8}(?:-[\da-fA-F]{4}){3}-[\da-fA-F]{12}}$" For Each strSubKey In arrSubKeys If objRegExp.Test(strSubKey) Then boolFound = True For Each arrParameter In arrParameters Select Case arrParameter(1) Case "DWORD" If objSWbemObjectEx.GetDWORDValue(HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", arrParameter(0), lngValue) <> 0 Then boolFound = False End If Case "BINARY" If objSWbemObjectEx.GetBinaryValue(HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", arrParameter(0), arrValues) <> 0 Then boolFound = False End If Case Else ' Not implemented End Select Next If boolFound Then For Each arrParameter In arrParameters Select Case arrParameter(1) Case "DWORD" If objSWbemObjectEx.SetDWORDValue(HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", arrParameter(0), arrParameter(2)) <> 0 Then WScript.Echo "Can't set DWord Value into parameter [HKLM\" & strKey & "\" & strSubKey & "\FxProperties" & "\" & arrParameter(0) & "]." End If Case "BINARY" If objSWbemObjectEx.SetBinaryValue(HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey & "\FxProperties", arrParameter(0), arrParameter(2)) <> 0 Then WScript.Echo "Can't set Binary Value into parameter [HKLM\" & strKey & "\" & strSubKey & "\FxProperties" & "\" & arrParameter(0) & "]." End If Case Else ' Not implemented End Select Next Exit For End If End If Next Set objRegExp = Nothing If Not boolFound Then WScript.Echo "Can't find any right subkey in [HKLM\" & strKey & "]." WScript.Quit 3 End If Else WScript.Echo "Nothing found in [HKLM\" & strKey & "]." WScript.Quit 2 End If Else WScript.Echo "Not found subkey [HKLM\" & strKey & "]." WScript.Quit 1 End If Set objSWbemObjectEx = Nothing Set objSWbemServicesEx = Nothing Set objSWbemLocator = Nothing WScript.Quit 0 |
Отправлено: 07:42, 18-02-2014 | #27 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Iska, Спасибо работает.
|
Отправлено: 08:52, 18-02-2014 | #28 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Товарищи знатоки, помогите пожалуйста изменить код этого скрипта, чтобы замена происходила автоматом, без подтверждений и уведомлений, в случае нахождения искомого значения в указанной ветке.
Option Explicit Dim SectionName Dim tmpRegFile Dim FindValue Dim AddValue Dim objWSS Dim objFSO Dim RegFile Dim CurrSection Dim GetLine Dim KeyName Dim strPrompt Dim ReturnValue SectionName = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook" tmpRegFile = "d:\tmp.reg" FindValue = "YYY.XXX.ru" AddValue = "ZZZ.XXX.ru" Set objWSS = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") objWSS.Run "regedit /e " & tmpRegFile & " """ & SectionName & """", 2, True Set RegFile = objFSO.OpenTextFile(tmpRegFile, 1, True, -1) Do While RegFile.AtEndOfStream <> True GetLine = RegFile.ReadLine If Left(GetLine, 6) = "[HKEY_" Then CurrSection = Mid(GetLine, 2, Len(GetLine) - 2) Else If InStr(GetLine, FindValue) Then strPrompt = "Вы желаете заменить значение ключа " & GetLine & vbNewLine & _ "в разделе " & CurrSection & vbNewLine & _ "на значение """ & AddValue & """?" ReturnValue = MsgBox(strPrompt, 35, "Замена в реестре") If ReturnValue = 6 Then KeyName = Replace(Split(GetLine, "=")(0), """", "") If KeyName = "@" Then KeyName = "" objWSS.RegWrite CurrSection & "\" & KeyName, AddValue, "REG_SZ" ElseIf ReturnValue = 2 Then Exit Do End If objWSS.RegWrite CurrSection & "\" & KeyName, AddValue, "REG_SZ" End If End If Loop RegFile.Close 'Следующая строка закомментирована для возможности отката изменений 'objFSO.DeleteFile tmpRegFile Set objWSS = Nothing Set objFSO = Nothing 'MsgBox "Скрипт завершил работу" WScript.Quit |
Отправлено: 12:36, 06-05-2016 | #29 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Как найти, где находится @c.atdmt.com | C181UMZ | Лечение систем от вредоносных программ | 1 | 29-07-2013 23:36 | |
CMD/BAT - [решено] Найти в реестре параметр и записать в переменную имя ветки в которой он находится | root221 | Скриптовые языки администрирования Windows | 11 | 25-11-2012 07:54 | |
V. 2007 - Сервер Microsoft Exchange как изменить имя, где оно находится. | vladimirz | Microsoft Exchange Server | 7 | 22-07-2010 20:19 | |
как удалить ключ реестра если он не хочет | oIo_DeN_oIo | Microsoft Windows 2000/XP | 10 | 23-12-2006 02:25 |
|