Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как найти и изменить параметр реестра не зная где он находится

Ответить
Настройки темы
VBS/WSH/JS - [решено] Как найти и изменить параметр реестра не зная где он находится

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


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

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


Изменения
Автор: krot183
Дата: 09-02-2014
Всем привет!
Помогите кто может.Нужно найти параметр реестра в ветке 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
Скрипт 2
Код: Выделить весь код
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

 

Ветеран


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

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


Цитата krot183:
Iska, Нужен раздел {75a38608-57f5-412d-a267-62e7cce381c1} »
Как определили, что именно этот, а не «{5e6adf67-f7ea-4c27-a9bb-a87213274fe4}», или какой-нибудь другой, або третий или четвёртый аналогичный раздел, буде таковые?

Отправлено: 22:49, 10-02-2014 | #11



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

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


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


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

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


Iska, Я отслеживал настройки через Regshot а потом проверял каждый параметр чтобы удалить лишнее.В {75a38608-57f5-412d-a267-62e7cce381c1} три параметра которые включают поправку на помещение ,изменяют настройки расстояния до колонок и громкость в db на каждую колонку.

Сделал батник но там тоже проблема нет разрешений на ветку реестра.

Последний раз редактировалось krot183, 10-02-2014 в 23:19.


Отправлено: 23:06, 10-02-2014 | #12


Ветеран


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

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


krot183, я могу повторить вопрос и в третий раз.

Выше Вы пишете, что имя подраздела «{75a38608-57f5-412d-a267-62e7cce381c1}» разное на разных машинах, кроме того, меняется при переустановке. В примере, который Вы выше выкладывали по моей просьбе, два подраздела. Я спрашиваю Вас, как определить нужный подраздел среди прочих, когда их будет два, три, четыре и более?

Отправлено: 23:21, 10-02-2014 | #13


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


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

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


Iska, Параметры в этом разделе не меняются.Меняется только {SID} раздела {75a38608-57f5-412d-a267-62e7cce381c1}

Искать по параметрам раздела.

Если бы знал как правильно написать не спрашивал бы.

Отправлено: 23:29, 10-02-2014 | #14


Ветеран


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

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


Цитата krot183:
Iska, Параметры в этом разделе не меняются.Меняется только {SID} раздела {75a38608-57f5-412d-a267-62e7cce381c1} »
Правильно ли я понимаю, что Вы утверждаете (и гарантируете), что разделы:
Код: Выделить весь код
{4b361010-def7-43a1-a5dc-071d955b62f7},14
{4b361010-def7-43a1-a5dc-071d955b62f7},16
{4b361010-def7-43a1-a5dc-071d955b62f7},15
могут находиться исключительно в одном (и только в одном!) из разделов «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\SID's», так?

Отправлено: 00:03, 11-02-2014 | #15


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


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

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


Iska, да.

Отправлено: 08:51, 11-02-2014 | #16


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


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

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


Помогите хто нибудь со скриптом не получается ничё.

Отправлено: 20:49, 16-02-2014 | #17


Ветеран


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

Профиль | Отправить 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"), _
	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
					WScript.Echo strResult
					
					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

Отправлено: 08:01, 17-02-2014 | #18


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


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

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


Iska, А где вводить значения или это просто поиск?

Отправлено: 08:30, 17-02-2014 | #19


Ветеран


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

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


Цитата krot183:
А где вводить значения »
Какие значения?

Отправлено: 08:51, 17-02-2014 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как найти и изменить параметр реестра не зная где он находится

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как найти, где находится @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




 
Переход