Синхронізація реєстру Windows між декількома комп'ютерами


9

У моєму реєстрі Windows XP є певна папка, яку я хотів би синхронізувати між двома комп'ютерами в стилі Dropbox. Я хочу, щоб це було те, що кожен раз, коли я вношу зміни в реєстрі на одному комп’ютері, це з’являється на іншому комп’ютері.

Можливо? Як?

(Якщо вам цікаво, чому я хочу це зробити: я хочу мати однакові сеанси PuTTY на всіх комп’ютерах.)


У мене є трохи ідеї для чогось ... Чи можете ви сказати мені точний шлях ключів реєстру, який ви хочете? Я виходжу зараз, але повернусь приблизно через годину і спробую допомогти далі.
Вільям Гілсум

@William Hilsum: Це HKEY_CURRENT_USER\Software\SimonTatham\PuTTY.
Рам Рахум

1
Ці комп'ютери взагалі в одній мережі? Або ви хочете, щоб це працювало і віддалено?
music2myear

@Ram Rachum Це однаково на обох комп'ютерах?
Вільям Гілсум

2
Якщо мова йде про Putty, то чому б не використовувати портативну шпаклівку ? Він зберігає налаштування у файлі. Синхронізуйте свої копії портативної шпаклівки через дропбокс або інше.
Zoredache

Відповіді:


6

Вибачте за те, що зайняли так довго, я думаю, що це найдовше, що я взяв, щоб написати відповідь!

Віки тому я хотів дуже подібний функціонал, але, я не міг знайти спосіб цього зробити ... тепер, коли я знаю зовсім трохи більше програмування, я подумав, що варто спробувати щось зробити.

Отже, через кілька годин, я даю вам RegSync v1,.

введіть тут опис зображення

Просто візьміть копію повного шляху до реєстру (у вашому випадку HKEY_CURRENT_USER\Software\SimonTatham\PuTTY) та вставте його у вікно.

Натисніть кнопку Пуск, і він автоматично відстежить цей ключ реєстру за будь-якими доповненнями, видаленнями або змінами.

Якщо він виявить будь-які зміни, він *експортує файл реєстру, викликаний regsync.regу тій самій папці, що і додаток.

* У випадку більше, ніж однієї зміни одночасно, вона чекатиме 5 секунд після першої зміни.

Якщо / після натискання кнопки запуску, він буде контролювати папку, в якій знаходиться, за будь-якими змінами у regsync.regфайлі, і якщо виявить зміни, видалить ВСІ записи із вибраного вами локального ключа реєстру та імпортуватиме файл реєстру. (Будьте уважні, він не перевірить відповідність .Regфайлу розташуванню, яке він відстежує, тому, якщо ви введете різні місця на кожному ПК, це може погіршитись).

Отже ... ви можете запустити це з папки "вікна" або акцій Windows або будь-якого іншого сервісу спільного використання папок. Запустіть його на обох комп'ютерах та виберіть ключ реєстру для моніторингу.

Додаткові нотатки ...

  • Для цього потрібна .NET Framework версія 4.

  • Він не контролює підрозділи, ви можете запускати додаткові копії інструменту, хоч у різних папках (у мене вже є ідеї, щоб покращити це, але, лише якщо у людей є необхідність у цьому інструменті).

  • Хоча це не вимагає підвищення рівня UAC, воно буде клопотати вас про висоту кожного разу, коли він намагатиметься імпортувати чи експортувати з реєстру (в основному це дзвінки regedit.exe/ reg.exe), тому я рекомендую запускати програму підвищеною ... Це робиться кілька разів і це стане дуже дратівливим.

  • Ніяких гарантій - він отримує значок "Працює на моєму ПК", і я перевірив його на декількох машинах, але це не було перегляду коду та годин тестування ... Почніть закінчувати через кілька годин.

Навіть якщо ви не закінчите його використовувати, я сподіваюся, що це комусь корисно!

Посилання для завантаження


Приємно! Чи зберігаєте ви це з закритим джерелом?
Рам Рахум

@Ram Rachum - Я насправді не дуже "займаюся" відкритим кодом (цілими проектами) багато ... Якщо у когось є питання / хоче щось побачити, я буду більш ніж радий надати з нього зразок коду ... або поділитися код з друзями через Dropbox .... Якщо у вас є якісь пропозиції або хочете вдосконалитись, повідомте мене. ... Я все ще досить новий програміст і намагаюся обвести голову навколо систем VCS ... Коли я їх зрозумію, я можу завантажувати / починати ділитися!
Вільям Гілсум

1
@William; Open Source не повинен бути фантазійним, просто застебніть джерело та завантажте його поряд, і це відкритий код!
Фоші

@Phoshi -: / хороший момент ... Можливо, незабаром!
Вільям Гілсум

RegSync v1 буде в кодексе в майбутньому як відкритий код? моїй компанії потрібен вихідний код аудиту перед встановленням будь-якої програми чи програми в середовищі.
Кікенет

5

може бути простіше запустити regedit.exe в беззвучному режимі з файлом реєстру, який містить точні записи, які ви хочете. Ви можете встановити кожен комп'ютер для запуску із спільного місця, тому все, що вам потрібно зробити, це оновити файл, і коли наступний запланований запуск regedit.exe працює на кожному комп'ютері, вони отримують нові записи.

щось на зразок:

regedit.exe /S puttyentries.reg

Щоб витягнути ключ реєстру з одного комп’ютера, ви використовуєте:

regedit.exe /E puttyentries.reg "registry_key"

Можливо, були б більш елегантні способи автоматизації всього процесу за допомогою vbscript або autoit з віддаленими функціями читання / запису для реєстру.

Ось приклад з AutoIt, який буде синхронізуватися кожні 30 хвилин із віддаленим комп'ютером (застереження, я справді цього не перевіряв):

While 1 ;loop indefinitely
    $i1 = 1 ;set initial counter
    While 1 ;loops through all sessions
        $keyname = RegEnumVal("\\REMOTECOMPUTER\HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions", $i1) ;reads session names
        If @error <> 0 Then ExitLoop ;exits when no more sessions exist
        $i2 = 1 ;set initial counter
        While 1 ;loops through all value in key until done
            $valuename = RegEnumVal("\\REMOTECOMPUTER\HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions" & "\" & $keyname, $i2) ;read value name from remote machine
            If @error <> 0 Then ExitLoop ;errors and escapes when no more values to read
            $type = @extended ;sets registry value type
            $value = RegRead("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Session" & "\" & $keyname, $valuename) ;read value
            RegWrite("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Session" & "\" & $keyname, $valuename, $type, $value) ;write key value to local machine
            $i2 = $i2 + 1 ;increment by 1
        WEnd
        $i1 = $i1 + 1 ;increment by 1
    WEnd
    Sleep(1800000) ;sleep 30 min
WEnd

Я не хотів би редагувати файл вручну. Можна regeditтакож витягнути з реєстру в беззвучному режимі?
Рам Рахум

відредаговано, щоб додати параметр читання, я побачу, що я можу написати для більш елегантного сценарію
MaQleod

1
Це може бути адекватним для хлопця, який запитав, але це не синхронізує видалення налаштувань. Отже, якщо ви видалите налаштування шпаклівки для одного експорту хоста, повторно імпортуйте на хост розділу, видалення не відбудеться. Під час експорту та повторного імпорту на хості ви видалили елемент конфігурації, видалений елемент буде відновлений.
Zoredache

ок, додав приклад autoit, який зробить весь процес самостійно (або, принаймні, слід, я його не перевіряв, тому, будь ласка, спочатку створіть резервну копію).
MaQleod
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.