Показать полную графическую версию : [решено] Переименование веток реестра
Roland1313
22-05-2014, 10:19
Добрый день всем.
Помогите, пожалуйста, решить вот такую задачку.
Есть ветка реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
В ней находятся разделы с именами вида S-1-5-21-191804846-4127745346-670726253-1007 и параметрами внутри этих разделов.
Иногда случаются проблемы, особенно после отключения электричества (это не лечится), когда пользователь не может зайти на сервер.
Тогда и появляются разделы с именами вида S-1-5-21-191804846-4127745346-670726253-1007.bak
Необходимо разделы вида S-1-5-21-191804846-4127745346-670726253-1007 у которых есть "клоны" S-1-5-21-191804846-4127745346-670726253-1007.bak удалить, а
S-1-5-21-191804846-4127745346-670726253-1007.bak переименовать в S-1-5-21-191804846-4127745346-670726253-1007 и во всех переименованных разделах параметрам RefCount и State присвоить значение 0.
Помогите плиз, это случается довольно часто, а профилей несколько сотен. Мучает сильно.
Спасибо.
Если случается часто — купите ИБП.
Roland1313
22-05-2014, 12:24
Спасибо за совет, конечно-же ИБП есть. Только запас батарей, к сожалению, не бесконечный.
Roland1313
22-05-2014, 18:28
Поверьте, тему с электричеством не решить, это не зависит, ни от электрика, ни от ИБП. Лучше попробовать решить текущую задачу.
Поверьте и Вы, что нет функции переименования раздела реестра: Registry Functions (Windows) (http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms724875(v=vs.85).aspx). Возможный путь замены — копирование раздела реестра с новым именем и последующее удаление раздела реестра со старым именем.
Ваш подход как к постановке задачи, так к выбору пути её решения — мне лично не интересен. Сожалею, я пас.
Roland1313
23-05-2014, 10:26
Я знаю, что переименование раздела невозможно и надо искать другие пути решения. Я перечитал все, что связано с этим. Мне не хватает знаний и опыта связать воедино несколько скриптов, которые есть на этом форуме. Поэтому и прошу помощи.
Объект, где находится сервер, расположен в 80 км от Кишинева. Деревенская подстанция древняя, как какашки мамонта. Говорить о ее замене не с кем. Поставщик услуг отмахивается и просит больших денег. За постановку задачи простите, пишу как умею. Выбор пути решения - так решения еще нет, из чего выбирать-то? Я, пожалуй, вист.
Мне не хватает знаний и опыта связать воедино несколько скриптов, которые есть на этом форуме. »
Ну так предложите на основе чего вы хотите решить Вашу задачу?
А так без заготовок это больно геморно...
Roland1313, да понятно, что Вам задача ставится «сверху» в виде «шоб було — и точка!».
Roland1313
23-05-2014, 14:51
Примерный алгоритм, как мне кажется, может быть таким:
1. Экспорт в reg-файл ветки реестра
2. Дальше работаем с reg-файлом
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\Test]
[HKEY_LOCAL_MACHINE\SYSTEM\Test\Test1]
"TEst3"="378"
[HKEY_LOCAL_MACHINE\SYSTEM\Test\Test1.bak]
"TEst3"="3"
[HKEY_LOCAL_MACHINE\SYSTEM\Test\Test2]
"Test4"="567"
[HKEY_LOCAL_MACHINE\SYSTEM\Test\Test2.bak]
"Test4"="4"
3. Из reg-файла строки вида [HKEY_LOCAL_MACHINE\SYSTEM\Test\Test2.bak] удаляем. В новый reg-файл (или в конец этого файла) переносим эти строки, но с минусом [-HKEY_LOCAL_MACHINE\SYSTEM\Test\Test2.bak]
4. Т. о. должно получиться что-то
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\Test]
[HKEY_LOCAL_MACHINE\SYSTEM\Test\Test1]
"TEst3"="378"
"TEst3"="3"
[HKEY_LOCAL_MACHINE\SYSTEM\Test\Test2]
"Test4"="567"
"Test4"="4"
[-HKEY_LOCAL_MACHINE\SYSTEM\Test\Test1.bak]
[-HKEY_LOCAL_MACHINE\SYSTEM\Test\Test2.bak]
5. Выполнив отредактированный reg-файл получим то, что надо.
Roland1313
23-05-2014, 17:55
В общем, всем большое спасибо за поддержку и советы. Сделал сам. Алгоритм описан выше.
fName = "test.reg" ' Где текстовый файл
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(fName,1,False,-2) ' Открываем исходный текст файл для чтения
AllTxt = F.ReadAll() ' Cчитываем весь файл в строковую переменную
F.Close ' Закрываем файл
Mas = Split(AllTxt, vbCr) ' Разбиваем полученную строку в массив. Резделитель - конец строки vbCr
LastTxt = ""
str1 = ".bak" ' подстрока замены
For i = 0 To UBound(Mas)
If UBound(Split(Mas(i), str1))>0 Then 'Если строка содержит ".bak"
LastTxt = LastTxt + Left(Mas(i), 1) + "-" + Right(Mas(i),Len(Mas(i))-1) + vbCrLf ' То будем писать ее в конец файла с "-"
Else AllTxt = AllTxt + Mas(i) + vbCrLf
End If
Next
AllTxt = AllTxt + LastTxt ' Объединяем строки
Set F = FSO.OpenTextFile(fName, 2, True) ' Открываем исходный файл для записи
F.Write AllTxt ' Записываем полученное на место исходного файла
F.Close ' Закрываем файл
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC