在多台计算机之间同步 Windows 注册表

Ram*_*hum 9 windows windows-registry sync windows-xp

在我的 Windows XP 注册表中有一个特定的文件夹,我希望在我的两台计算机之间同步,Dropbox 风格。我希望它的方式是每次我在一台计算机上进行注册表更改时,它都会出现在其他计算机上。

可能的?如何?

(如果您对我为什么要这样做感到好奇:我希望在所有计算机上都有相同的 PuTTY 会话。)

Wil*_*sum 6

抱歉拖了这么久,我想这是我写答案所用时间最长的一次!

很久以前,我想要非常相似的功能,但是,我找不到做它的方法……现在我知道更多的编程,我认为值得尝试做一些事情。

所以,几个小时后,我给你,RegSync v1

在此处输入图片说明

只需复制完整的注册表路径(在您的情况下HKEY_CURRENT_USER\Software\SimonTatham\PuTTY)并将其粘贴到框中。

单击开始,它将自动监视该注册表项的任何添加、删除或更改。

如果它检测到任何更改,它将*导出regsync.reg在应用程序运行的同一文件夹中调用的注册表文件。

* 如果一次有多个更改,它将在第一次更改后等待 5 秒。

当/按下开始按钮后,它将监视它所在的文件夹是否有任何更改regsync.reg,如果检测到更改,它将删除您在本地选择的注册表项中的所有条目并导入注册表文件。(请注意,它不会检查.Reg文件是否与它正在监视的位置匹配,因此,如果您在每台电脑上键入不同的位置,它可能会出错)。

所以...您可以从 dropbox 或 windows 共享或任何其他文件夹共享服务运行它。在两台计算机上运行它并选择要监视的注册表项。

补充说明...

  • 这需要 .NET 框架版本 4。

  • 它不监视子项,您可以在不同的文件夹中运行该工具的其他副本(我已经有了改进这一点的想法,但前提是人们需要该工具)。

  • 虽然它不需要 UAC 提升,但它每次尝试从注册表导入或导出时都会让您感到提升(它基本上调用regedit.exe/ reg.exe),因此,我建议您运行提升的程序......它会这样做几次它会变得非常烦人。

  • 没有保证 - 它获得了“在我的 PC 上工作”的标志,我已经在几台机器上对其进行了测试,但是,这还没有进行代码审查和数小时的测试......在几个小时内开始完成。

即使你最终没有使用它,我希望它对那里的人有用!

下载链接


MaQ*_*eod 5

使用包含您想要的确切条目的注册表文件以静默模式运行 regedit.exe 可能会更容易。您可以将每台计算机设置为从共享位置运行它,因此您需要做的就是更新文件,当 regedit.exe 的下一次计划运行在每台计算机上运行时,它们将获得新条目。

就像是:

regedit.exe /S puttyentries.reg
Run Code Online (Sandbox Code Playgroud)

为了从一台计算机中提取注册表项,您可以使用:

regedit.exe /E puttyentries.reg "registry_key"
Run Code Online (Sandbox Code Playgroud)

可能会有更优雅的方法使用 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
Run Code Online (Sandbox Code Playgroud)