Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переименование веток реестра (http://forum.oszone.net/showthread.php?t=282538)

Roland1313 22-05-2014 10:19 2354243

Переименование веток реестра
 
Добрый день всем.
Помогите, пожалуйста, решить вот такую задачку.
Есть ветка реестра 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.

Помогите плиз, это случается довольно часто, а профилей несколько сотен. Мучает сильно.

Спасибо.

Iska 22-05-2014 11:59 2354284

Если случается часто — купите ИБП.

Roland1313 22-05-2014 12:24 2354305

Спасибо за совет, конечно-же ИБП есть. Только запас батарей, к сожалению, не бесконечный.

Iska 22-05-2014 12:43 2354316

Смените электрика.

Roland1313 22-05-2014 18:28 2354459

Поверьте, тему с электричеством не решить, это не зависит, ни от электрика, ни от ИБП. Лучше попробовать решить текущую задачу.

Iska 22-05-2014 23:28 2354595

Поверьте и Вы, что нет функции переименования раздела реестра: Registry Functions (Windows). Возможный путь замены — копирование раздела реестра с новым именем и последующее удаление раздела реестра со старым именем.

Ваш подход как к постановке задачи, так к выбору пути её решения — мне лично не интересен. Сожалею, я пас.

Roland1313 23-05-2014 10:26 2354728

Я знаю, что переименование раздела невозможно и надо искать другие пути решения. Я перечитал все, что связано с этим. Мне не хватает знаний и опыта связать воедино несколько скриптов, которые есть на этом форуме. Поэтому и прошу помощи.

Объект, где находится сервер, расположен в 80 км от Кишинева. Деревенская подстанция древняя, как какашки мамонта. Говорить о ее замене не с кем. Поставщик услуг отмахивается и просит больших денег. За постановку задачи простите, пишу как умею. Выбор пути решения - так решения еще нет, из чего выбирать-то? Я, пожалуй, вист.

Anton04 23-05-2014 12:26 2354774

Цитата:

Цитата Roland1313
Мне не хватает знаний и опыта связать воедино несколько скриптов, которые есть на этом форуме. »

Ну так предложите на основе чего вы хотите решить Вашу задачу?
А так без заготовок это больно геморно...

Iska 23-05-2014 13:53 2354812

Roland1313, да понятно, что Вам задача ставится «сверху» в виде «шоб було — и точка!».

Roland1313 23-05-2014 14:51 2354843

Примерный алгоритм, как мне кажется, может быть таким:
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 2354907

В общем, всем большое спасибо за поддержку и советы. Сделал сам. Алгоритм описан выше.
Код:

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                                    ' Закрываем файл



Время: 20:44.

Время: 20:44.
© OSzone.net 2001-