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


9

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

可能?怎么样?

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


我对某事有点想法...您能告诉我想要的腻子注册表项的确切路径吗?我现在要出去,但是会在一个小时后回来,并会尝试进一步提供帮助。
威廉·希尔森,

@威廉希尔斯姆:是的HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
Ram Rachum

1
这些计算机通常在同一网络上吗?还是您希望它也可以远程工作?
music2myear11年

@Ram Rachum在两台计算机上都一样吗?
William Hilsum

2
如果这是关于腻子的,为什么不使用便携式腻子呢?它将设置存储在文件中。通过保管箱或其他方式同步您的便携式腻子副本。
Zoredache

Answers:


6

很抱歉花了这么长时间,我认为这是我写答案所花的最长时间!

多年以前,我想要非常相似的功能,但是,我找不到一种实现方法……现在,我知道更多的编程知识,我认为值得尝试一下。

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

在此处输入图片说明

只需复制完整的注册表路径(就您而言HKEY_CURRENT_USER\Software\SimonTatham\PuTTY),然后将其粘贴到框中。

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

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

* 如果一次进行多个更改,则第一次更改后将等待5秒钟。

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

因此...您可以从保管箱或Windows共享或任何其他文件夹共享服务运行此文件。在两台计算机上运行它,然后选择要监视的注册表项。

额外说明...

  • 这需要.NET Framework版本4。

  • 它不监视子项,尽管您可以在其他文件夹中运行该工具的其他副本(我已经有改善此想法的想法,但是仅当人们需要该工具时)。

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

  • 不能保证-它获得了“可以在我的PC上工作”的标志,并且我已经在几台计算机上对其进行了测试,但是,这还没有代码审查和测试时间。

即使您最终不使用它,也希望它对那里的人有用!

下载链接


真好!您是否将其保持为开源状态?
Ram Rachum

@Ram Rachum-我并没有真正“做”开源(整个项目)...如果有人有任何疑问/想看任何东西,我将非常乐意从中提供示例代码...或分享通过Dropbox与朋友进行编码...。如果您有任何建议或需要改进,请告诉我。...我还是一个新手,并且一直在努力使自己了解VCS系统...当我理解它们时,我可能会上载/开始共享!
William Hilsum

1
@威廉; 开源不一定非要花哨,只需将其压缩并上传即可,它就是开源的!
Phoshi 2011年

@Phoshi-:/好点...也许很快!
威廉·希尔森,

RegSync v1将来会像开源一样进入Codeplex吗?在环境中安装任何应用程序或程序之前,我公司需要审核源代码。
Kiquenet

5

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

就像是:

regedit.exe /S puttyentries.reg

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

regedit.exe /E puttyentries.reg "registry_key"

可能会有更优雅的方法使用vbscript自动化或使用注册表的远程读/写功能自动执行整个过程。

这是AutoIt的示例,它将每30分钟与一台远程计算机同步一次(caveat,我确实没有对此进行过测试):

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也可以以静默方式从注册表中提取内容吗?
Ram Rachum

编辑以添加读取选项,我将看到可以为更精美的脚本选项编写的内容
MaQleod 2011年

1
这对于提出要求的人可能就足够了,但这不会同步删除设置。因此,如果在一个主机导出上删除油灰设置,然后在分区主机上重新导入,则不会发生删除。当您在主机上导出并重新导入后,您删除了配置项,则已删除的项将被还原。
Zoredache

好的,添加了一个autoit示例,该示例将自行完成整个过程(或者至少应该,我尚未对其进行测试,因此请首先备份所有内容)。
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.