Synchronisation du registre Windows entre plusieurs ordinateurs

9

Il y a un certain dossier dans mon registre Windows XP que je voudrais synchroniser entre mes 2 ordinateurs, de style Dropbox. La façon dont je veux que ce soit, c'est que chaque fois que je fais un changement de registre sur un ordinateur, il apparaît sur les autres ordinateurs.

Possible? Comment?

(Si vous êtes curieux de savoir pourquoi je veux faire cela: je veux avoir les mêmes sessions PuTTY sur tous les ordinateurs.)

Ram Rachum
la source
J'ai une petite idée de quelque chose ... Pouvez-vous me dire le chemin exact des clés de registre de mastic que vous voulez? Je sors maintenant, mais je serai de retour dans environ une heure et j'essaierai d'aider davantage.
William Hilsum
@William Hilsum: Oui HKEY_CURRENT_USER\Software\SimonTatham\PuTTY.
Ram Rachum
1
Ces ordinateurs sont-ils généralement sur le même réseau? Ou voulez-vous que cela fonctionne également à distance?
music2myear
@Ram Rachum Est-ce la même chose sur les deux ordinateurs?
William Hilsum
2
S'il s'agit de mastic , pourquoi ne pas utiliser du mastic portable ? Il stocke les paramètres dans un fichier. Synchronisez vos copies de Portable Putty via dropbox ou autre.
Zoredache

Réponses:

6

Désolé d'avoir pris autant de temps, je pense que c'est le plus long que j'ai pris pour écrire une réponse!

Il y a un certain temps, je voulais des fonctionnalités très similaires, mais je ne pouvais pas trouver un moyen de le faire ... maintenant que je connais un peu plus de programmation, je pensais que cela valait la peine d'essayer de faire quelque chose.

Ainsi, quelques heures plus tard, je vous donne, RegSync v1.

entrez la description de l'image ici

Prenez simplement une copie du chemin de registre complet (dans votre cas HKEY_CURRENT_USER\Software\SimonTatham\PuTTY) et collez-le dans la boîte.

Cliquez sur Démarrer et il surveillera automatiquement cette clé de registre pour tout ajout, suppression ou modification.

S'il détecte des modifications, il *exportera un fichier de registre appelé regsync.regdans le même dossier que l'application en cours d'exécution.

* En cas de plusieurs changements à la fois, il attendra 5 secondes après le premier changement.

Lorsque / après avoir appuyé sur le bouton Démarrer, il surveillera le dossier dans lequel il se trouve pour toute modification du regsync.regfichier, et s'il détecte une modification, il supprimera TOUTES les entrées de la clé de registre que vous avez sélectionnée localement et importera le fichier de registre. (Veuillez faire attention, il ne vérifiera pas que le .Regfichier correspond à l'emplacement qu'il surveille, donc, si vous tapez des emplacements différents sur chaque PC, cela peut mal tourner).

Donc ... vous pouvez l'exécuter à partir de dropbox ou de partages Windows, ou de tout autre service de partage de dossiers. Exécutez-le sur les deux ordinateurs et sélectionnez la clé de registre à surveiller.

Notes supplémentaires ...

  • Cela nécessite la version 4 du framework .NET.

  • Il ne surveille pas les sous-clés, vous pouvez exécuter des copies supplémentaires de l'outil dans des dossiers différents (j'ai déjà des idées pour améliorer cela, mais seulement si les gens ont besoin de l'outil).

  • Bien qu'il ne nécessite pas d'élévation UAC, il vous bug pour l'élévation chaque fois qu'il essaie d'importer ou d'exporter depuis le registre (il appelle essentiellement regedit.exe/ reg.exe), donc, je vous recommande d'exécuter le programme elevated ... Il le fait plusieurs fois et cela deviendra très ennuyeux.

  • Aucune garantie - Il obtient le badge "Works on my PC", et je l'ai testé sur plusieurs machines, mais, cela n'a pas eu de révision de code et d'heures de test ... Commencez à terminer en quelques heures.

Même si vous ne finissez pas par l'utiliser, j'espère que cela sera utile à quelqu'un là-bas!

Lien de téléchargement

William Hilsum
la source
Agréable! Le gardez-vous en source fermée?
Ram Rachum
@Ram Rachum - Je ne "fais" pas vraiment de l'open source (projets entiers) ... Si quelqu'un a des questions / veut voir quelque chose, je serai plus qu'heureux de fournir un exemple de code à partir de cela ... ou de partager code avec des amis sur Dropbox .... Si vous avez des suggestions ou souhaitez des améliorations, faites-le moi savoir. ... Je suis encore un nouveau programmeur et j'ai essayé de me familiariser avec les systèmes VCS ... Quand je les comprends, je peux télécharger / commencer à partager!
William Hilsum
1
@William; L'open source n'a pas besoin d'être sophistiqué, il suffit de compresser la source et de la télécharger à côté et c'est open source!
Phoshi
@Phoshi -: / bon point ... Peut-être bientôt!
William Hilsum
RegSync v1 sera à l'avenir en codeplex comme open source? mon entreprise a besoin d'auditer le code source avant d'installer une application ou un programme dans des environnements.
Kiquenet
5

il peut être plus facile d'exécuter regedit.exe en mode silencieux avec un fichier de registre contenant les entrées exactes souhaitées. Vous pouvez configurer chaque ordinateur pour qu'il s'exécute à partir d'un emplacement partagé. Il vous suffit donc de mettre à jour le fichier et lorsque la prochaine exécution planifiée de regedit.exe s'exécute sur chaque ordinateur, il obtient les nouvelles entrées.

quelque chose comme:

regedit.exe /S puttyentries.reg

Afin d'extraire une clé de registre d'un ordinateur, vous utiliseriez:

regedit.exe /E puttyentries.reg "registry_key"

Il y aurait probablement des moyens plus élégants d'automatiser l'ensemble du processus en utilisant vbscript ou autoit avec des fonctions de lecture / écriture à distance pour le registre.

Voici un exemple avec AutoIt qui se synchronisera toutes les 30 minutes avec un ordinateur distant (mise en garde, je n'ai vraiment pas testé cela):

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
MaQleod
la source
Je ne voudrais pas modifier un fichier manuellement. Peut regeditégalement extraire du registre en mode silencieux?
Ram Rachum
modifié pour ajouter une option de lecture, je verrai ce que je peux écrire pour une option de script plus élégante
MaQleod
1
Cela peut être suffisant pour le gars qui a demandé, mais cela ne synchronisera pas la suppression des paramètres. Donc, si vous supprimez un paramètre de mastic sur une exportation d'hôte, réimportez sur l'hôte de votre section, la suppression ne se produira pas. Lorsque vous exportez et réimportez sur l'hôte sur lequel vous avez supprimé un élément de configuration, votre élément supprimé est restauré.
Zoredache
ok, a ajouté un exemple d'autoit qui fera tout le processus par lui-même (ou du moins il le devrait, je ne l'ai pas testé, alors sauvegardez tout d'abord).
MaQleod