Sincronizar el registro de Windows entre varias computadoras

9

Hay una determinada carpeta en mi registro de Windows XP que me gustaría sincronizar entre mis 2 computadoras, al estilo de Dropbox. La forma en que quiero que sea es que cada vez que hago un cambio de registro en una computadora, aparece en la (s) otra (s) computadora (s).

¿Posible? ¿Cómo?

(Si tiene curiosidad acerca de por qué quiero hacer esto: quiero tener las mismas sesiones PuTTY en todas las computadoras).

Ram Rachum
fuente
Tengo una pequeña idea para algo ... ¿Puede decirme la ruta exacta de las claves de registro de masilla que desea? Salgo ahora pero volveré en aproximadamente una hora e intentaré ayudar más.
William Hilsum
@William Hilsum: Es HKEY_CURRENT_USER\Software\SimonTatham\PuTTY.
Ram Rachum
1
¿Estas computadoras están generalmente en la misma red? ¿O quieres que esto funcione remotamente también?
music2myear
@ Ram Rachum ¿Es lo mismo en ambas computadoras?
William Hilsum
2
Si se trata de masilla, ¿por qué no usar masilla portátil ? Almacena la configuración en un archivo. Sincronice sus copias de Portable Putty a través de Dropbox o lo que sea.
Zoredache

Respuestas:

6

Perdón por tomar tanto tiempo, ¡creo que este es el tiempo más largo que he tomado para escribir una respuesta!

Hace siglos, quería una funcionalidad muy similar, pero no pude encontrar una manera de hacerlo ... ahora que conozco bastante más programación, pensé que valdría la pena intentar hacer algo.

Así, unas horas más tarde, se lo dan, RegSync v1.

ingrese la descripción de la imagen aquí

Simplemente tome una copia de la ruta completa del registro (en su caso HKEY_CURRENT_USER\Software\SimonTatham\PuTTY) y péguela en el cuadro.

Haga clic en Inicio y supervisará automáticamente esa clave de registro en busca de adiciones, eliminaciones o cambios.

Si detecta algún cambio, *exportará un archivo de registro llamado regsync.regen la misma carpeta en la que se ejecuta la aplicación.

* En caso de más de un cambio a la vez, esperará 5 segundos después del primer cambio.

Cuando / después de presionar el botón de inicio, controlará la carpeta en la que se encuentra para regsync.regdetectar cualquier cambio en el archivo, y si detecta un cambio, eliminará TODAS las entradas en la clave de registro que seleccionó localmente e importará el archivo de registro. (Tenga cuidado, no comprobará que el .Regarchivo coincida con la ubicación que está monitoreando, por lo tanto, si escribe diferentes ubicaciones en cada PC, puede salir mal).

Entonces ... puede ejecutar esto desde Dropbox o Windows Share, o cualquier otro servicio para compartir carpetas. Ejecútelo en ambas computadoras y seleccione la clave de registro para monitorear.

Notas adicionales...

  • Esto requiere .NET Framework versión 4.

  • No supervisa las subclaves, aunque puede ejecutar copias adicionales de la herramienta en diferentes carpetas (ya tengo ideas para mejorar esto, pero solo si la gente necesita la herramienta).

  • Si bien no requiere elevación de UAC, lo molestará para la elevación cada vez que intente importar o exportar desde el registro (Básicamente llama regedit.exe/ reg.exe), por lo tanto, recomiendo que ejecute el programa elevado ... Lo hace varias veces y se volverá muy molesto.

  • Sin garantías: obtiene el distintivo "Funciona en mi PC" y lo he probado en algunas máquinas, pero esto no ha tenido revisión de código y horas de prueba ... Comience a terminar en unas pocas horas.

Incluso si no termina usándolo, ¡espero que sea útil para alguien por ahí!

Enlace de descarga

William Hilsum
fuente
¡Agradable! ¿Lo estás manteniendo de código cerrado?
Ram Rachum
@Ram Rachum - Realmente no "hago" código abierto (proyectos completos) mucho ... Si alguien tiene alguna pregunta / quiere ver algo, estaré más que feliz de proporcionarle un código de muestra ... o compartirlo código con amigos a través de Dropbox ... Si tiene alguna sugerencia o desea alguna mejora, hágamelo saber. ... Todavía soy un programador bastante nuevo y he estado tratando de entender los sistemas VCS ... ¡Cuando los entiendo, puedo subir / comenzar a compartir!
William Hilsum
1
@Guillermo; El código abierto no tiene que ser sofisticado, ¡simplemente cierre la fuente y cárguela al costado y es de código abierto!
Phoshi
@Phoshi -: / buen punto ... ¡Quizás pronto entonces!
William Hilsum
RegSync v1 estará en codeplex en el futuro como código abierto? mi empresa necesita el código fuente de auditoría antes de instalar cualquier aplicación o programa en entornos.
Kiquenet
5

puede ser más fácil ejecutar regedit.exe en modo silencioso con un archivo de registro que contiene las entradas exactas que desea. Puede configurar cada computadora para que se ejecute desde una ubicación compartida, por lo que todo lo que necesita hacer es actualizar el archivo y cuando se ejecuta la próxima ejecución programada de regedit.exe en cada computadora, obtienen las nuevas entradas.

algo como:

regedit.exe /S puttyentries.reg

Para extraer una clave de registro de una computadora, usaría:

regedit.exe /E puttyentries.reg "registry_key"

Probablemente habría formas más elegantes de automatizar todo el proceso usando vbscript o autoit con funciones remotas de lectura / escritura para el registro.

Aquí hay un ejemplo con AutoIt que se sincronizará cada 30 minutos con una computadora remota (advertencia, realmente no lo he probado):

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
fuente
No me gustaría editar un archivo manualmente. ¿ regeditTambién se puede extraer del registro en modo silencioso?
Ram Rachum
editado para agregar la opción de lectura, veré lo que puedo escribir para una opción de
script
1
Esto puede ser adecuado para el tipo que preguntó, pero esto no sincronizará la eliminación de la configuración. Entonces, si elimina una configuración de masilla en una exportación de host, vuelva a importar en su host de sección, la eliminación no se realizará. Cuando exporta y vuelve a importar en el host que eliminó un elemento de configuración, su elemento eliminado se restaurará.
Zoredache
ok, agregué un ejemplo de autoit que hará todo el proceso por sí solo (o al menos debería, no lo he probado, así que haga una copia de seguridad de todo primero).
MaQleod