none
Script Copia Seguridad Outlook y outlook express mediante GPO RRS feed

  • Pregunta

  • Hola:

     

    Tengo una red de 15 usuarios en un AD en 2003 server (es un servidor de datos, DNS, DHCP y AD). He creado una politica para una OU en la que, en el inicio de sesion, crea una copia de seguridad del correo de cada usuario perteneciente a dicha OU , en una carpeta en el servidor (una para cada usuario) mediante 2 scripts, uno para Outlook y otro para Outlook express.

     

    Los scripts son estos:

     

    OUTLOOK

     

    Set shell= WScript.CreateObject("WScript.Shell")

    strUserName = shell.ExpandEnvironmentStrings("%USERNAME%")

    Dim fso

    set fso = CreateObject("Scripting.FileSystemObject")

    dia = weekday(now())

    '1: domingo 2:lunes 3:martes 4:miercoles 5:jueves 6:viernes

    if dia = 3 then

    Fso.CopyFile "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Microsoft\Outlook\Outlook.pst" , "\\servidor2007\CorreoElectronico\correo_" & strUserName & "\outlook.pst"

    Wscript.echo "Copia de correo realizada con exito"

    end if

    set fso = nothing

     

    OUTLOOK EXPRESS

     

    Set shell= WScript.CreateObject("WScript.Shell")

    strUserName = shell.ExpandEnvironmentStrings("%USERNAME%")

    dim fso

    set fso = CreateObject("Scripting.FileSystemObject")

    dia = weekday(now())

    '1: domingo 2:lunes 3:martes 4:miercoles 5:jueves 6:viernes

    if dia = 3 then

    fso.CopyFolder "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Identities","\\servidor2007\CorreoElectronico\correo_" & strUserName,True

    Wscript.echo "Copia de correo realizada con exito"

    end if

    set fso = nothing

     

    Los scritps se ejecutan bien, el problema es que lo hacen secuencialmente en cada inicio de sesion de cada usuario y da un error porque no encuentra la ruta del outlook o bien la del express.Me interesaria unificarlos y que el script resultante distinguiera si el programa de correo predeterminado de cada usuario es Outlook u Outlook express y , en funcion de eso, realice uno u otro.

     

    Esto medida es temporal hasta que se homogeinicen los clientes de correo para que sean todos Outlook.

     

    Gracias

     

    jueves, 14 de febrero de 2008 10:01

Respuestas

  •  

    Una que se me ocurre es que pongas en distintas OUs los que tengan OE y Outlook.

     

    Otra seria consultar la siguiente entrada en el registro:

     

    HKEY_CLASSES_ROOT\mailto\shell\open\command

     

    y puedes ver cual es el cliente por defecto de correo.
    jueves, 14 de febrero de 2008 11:18
  • Prueba con esto:

     

     

    Code Snippet

    clave = LCase(WshShell.RegRead("HKEY_CLASSES_ROOT\mailto\shell\open\command\"))

     

    num = InStr(clave, "outlook.exe")

     

    if num <> 0 then
     rem es outlook
    else
     rem es outlook express
    end if

     

     

    jueves, 14 de febrero de 2008 19:47
  • Esto es porque, de alguna forma, ya existia el perfil en la máquina cuando la pusiste en dominio, asi cuando el usuario se logueo la primera vez, cuando quiso crear el perfil ya existia con ese nombre entonces lo creo con el nombre del usuario.dominio.

     

    Tambien es posible que alguna vez haya quedado bloqueado el perfil por algun motivo y se creo de nuevo (aunque esta es más rara).

     

    Debería ser alguna de esas dos opciones, ya que son las más comunes.

    viernes, 15 de febrero de 2008 16:38

Todas las respuestas

  •  

    Una que se me ocurre es que pongas en distintas OUs los que tengan OE y Outlook.

     

    Otra seria consultar la siguiente entrada en el registro:

     

    HKEY_CLASSES_ROOT\mailto\shell\open\command

     

    y puedes ver cual es el cliente por defecto de correo.
    jueves, 14 de febrero de 2008 11:18
  •  

    Gracias por responder con tanta celeridad.

     

    De momento he creado 2 OUs dentro de otra que es departamental y he aplicado el script correspondiente y funciona.

     

    aun asi me interesaria unificar los 2 , probare con la clave de registro y metiendole un "if"

     

    Un saludo

    jueves, 14 de febrero de 2008 11:58
  •  

    Estoy intentando hacer el scritp unificado  y esto es lo que tengo:

     

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    Dim fso
    Dim WshShell, clave
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set WshShell = WScript.CreateObject("WScript.Shell")


    strUserName = shell.ExpandEnvironmentStrings("%USERNAME%")
    clave = WshShell.RegRead("HKEY_CLASSES_ROOT\mailto\shell\open\command\")

     

    if clave = *msimn.exe* then

     

    'aqui pretendo que busque "msimn.exe" en la cadena del valor "clave"  y , si lo encuentra, hacer la copia de 'carpetas del outlook express y , si no, copiar el archivo pst del outlook,

    'pero me falla en el "if clave = *msimn.exe* then" porque no reconoce los asteriscos y quiero que busque

    'esa expresion dentro de la cadena

     

    fso.CopyFolder "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Identities","\\servidor2007\CorreoElectronico\correo_" & strUserName,True

    Wscript.echo "Copia de Outlook Express realizada con exito"

     

    else

     

    Fso.CopyFile "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Microsoft\Outlook\Outlook.pst" , "\\servidor2007\CorreoElectronico\correo_" & strUserName & "\outlook.pst"

    Wscript.echo "Copia de Outlook realizada con exito"

     

    end If

     

    set fso = nothing
    Set WshShell = nothing

     

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    no quiero tener que hacer un bucle for para recorrer toda la cadena.

     

    Gracias

    jueves, 14 de febrero de 2008 15:20
  • Prueba con esto:

     

     

    Code Snippet

    clave = LCase(WshShell.RegRead("HKEY_CLASSES_ROOT\mailto\shell\open\command\"))

     

    num = InStr(clave, "outlook.exe")

     

    if num <> 0 then
     rem es outlook
    else
     rem es outlook express
    end if

     

     

    jueves, 14 de febrero de 2008 19:47
  •  

    Hola:

     

    funciona perfecto. Aqui dejo el codigo. Esta programado para hacerse los miercoles:

     

    ***********************************************************************************************

    Dim fso
    Dim WshShell, clave

     

    Set shell= WScript.CreateObject("WScript.Shell")
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set WshShell = WScript.CreateObject("WScript.Shell")

     

    strUserName = shell.ExpandEnvironmentStrings("%USERNAME%")
    clave = LCase(WshShell.RegRead("HKEY_CLASSES_ROOT\mailto\shell\open\command\"))

     

    num = InStr(clave, "outlook.exe")
    dia = weekday(now())

     

    '1: domingo 2: lunes 3: martes 4: miercoles 5: jueves 6: viernes

     

    if dia = 4 then

     

     if num <> 0 then

     

      Fso.CopyFile "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Microsoft\Outlook\Outlook.pst" , "\\servidor\CorreoElectronico\correo_" & strUserName & "\outlook.pst"

     

      Wscript.echo "Copia de Outlook del usuario " & strUserName & " realizada con exito"

     

     else

     

      fso.CopyFolder "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Identities","\\servidor\CorreoElectronico\correo_" & strUserName,True

     

      Wscript.echo "Copia de Outlook Express del usuario " & strUserName & " realizada con exito"

     

     End if

     

    end if

     

    set fso = nothing
    Set WshShell = nothing
    set num = nothing

     

    ************************************************************************************************************

     

    Gracias y un saludo

    viernes, 15 de febrero de 2008 9:38
  • Hola:

     

    De los 15 usuarios autenticados en el dominio, once son clientes con XP Pro SP2 y otros cuatro con W2000 SP4.

     

    De estos cuatro con W2000 hay dos (que usan Outlook express) en los que no se ejecuta el script porque no encuentra la ruta origen (la del usuario):

     

    "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Identities"

     

    No logro encontrar el por qué ,porque los otros dos usuarios con W2000 usuarios los ejecutan sin problema (tambien con Outlook Express).

     

    Todos los usuarios se validan contra un dominio alojado en un servidor local (en la misma empresa).

     

    Lo unico que percibo diferente en estos 2 usuarios es que su perfil esta en la forma: "nombre.dominio" mientras el resto es solo "nombre". Me explico:

     

    la mayoria estan asi:

     

    C:\Documents and Settings\usuario\Configuración local\Datos de programa\Identities

     

    y estos dos estan asi:

     

    C:\Documents and Settings\usuario.dominio\Configuración local\Datos de programa\Identities

     

    No se hasta que punto puede influir esto.

     

    He creado 2 archivos bat con los nombres especificos hasta que subsane el problema

     

     

    un saludo

     

    P.D: este es la primera vez que posteo y este post deberia ir a "Scritps". Pido disculpas por haberlo pueto aqui.

    Si me lo pueden mover, lo agradeceria

     

     

    viernes, 15 de febrero de 2008 15:02
  • Esto es porque, de alguna forma, ya existia el perfil en la máquina cuando la pusiste en dominio, asi cuando el usuario se logueo la primera vez, cuando quiso crear el perfil ya existia con ese nombre entonces lo creo con el nombre del usuario.dominio.

     

    Tambien es posible que alguna vez haya quedado bloqueado el perfil por algun motivo y se creo de nuevo (aunque esta es más rara).

     

    Debería ser alguna de esas dos opciones, ya que son las más comunes.

    viernes, 15 de febrero de 2008 16:38
  • Buen dia gente... mejore un poquito el scrip.
    1° hice que verificara si ya existia una copia en el server, si es asi le avisa al user y no pisa la copia( esto es por si el user reinicia la pc el mismo dia 2 veces, para que no copie 2 veces el backup)
    2° Hice que le aparezca al user un iexplorer diciendo que aguarde un momento asi no abre el outlook y sabe q esta haciendo la pc ya que en algunos casos la copia lleva algunos minutos.
    Aqui va el codigo.. deps me voy a poner a configurar para que me envie mails de info

    Dim fso
    Dim WshShell, clave


    Set shell= WScript.CreateObject("WScript.Shell")
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set WshShell = WScript.CreateObject("WScript.Shell")


    strUserName = shell.ExpandEnvironmentStrings("%USERNAME%")
    clave = LCase(WshShell.RegRead("HKEY_CLASSES_ROOT\mailto\shell\open\command\"))


    num = InStr(clave, "outlook.exe")
    dia = weekday(now())


    '1: domingo 2: lunes 3: martes 4: miercoles 5: jueves 6: viernes


    if dia = 5 then


    if num <> 0 then

    if Fso.FolderExists ("\\servidor\CorreoElectronico\correo_" & strUserName) then

    Wscript.echo " BackUp del Outlook Express de " & strUserName & " ya existe "

    end if

    if not Fso.FolderExists ("\\servidor\CorreoElectronico\correo_" & strUserName) then

    On Error Resume Next
    strComputer = "."
    Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
    For Each objItem in colItems
    intHorizontal = objItem.ScreenWidth
    intVertical = objItem.ScreenHeight
    Next

    Set objExplorer = CreateObject _
    ("InternetExplorer.Application")

    objExplorer.Navigate "about:blank"
    objExplorer.ToolBar = 0
    objExplorer.StatusBar = 0
    objExplorer.Left = (intHorizontal - 400) / 2
    objExplorer.Top = (intVertical - 200) / 2
    objExplorer.Width = 400
    objExplorer.Height = 200
    objExplorer.Visible = 1

    objExplorer.Document.Body.Style.Cursor = "wait"

    objExplorer.Document.Title = "BackUp Outlook Express en progreso"
    objExplorer.Document.Body.InnerHTML = "Espere mientras se ejecuta el backup del Outlook Express. " _
    & "Por favor no cierre esta ventana."

    fso.CopyFolder "C:\Documents and Settings\" & strUserName & "\Configuración local\Datos de programa\Identities","\\servidor\CorreoElectronico\correo_" & strUserName,True

    objExplorer.Document.Body.Style.Cursor = "default"

    objExplorer.Quit

    Wscript.echo "BackUp del Outlook Express de " & strUserName & " realizado con exito"

    end if

    end if

    end if



    set fso = nothing
    Set WshShell = nothing
    set num = nothing


    jueves, 13 de marzo de 2008 15:14
  • Disculpa mi pregunta, estoy haciendo mis primeros pasos en esto. como lo ejecuto al script, que extension tiene.

    Gracias

     

    viernes, 9 de mayo de 2008 15:09
  • la extensión es vbs. Lo ejecutas como logon script a traves de una GPO

     

    viernes, 9 de mayo de 2008 16:19
  • me pueden ayudar.. dandonos las instruciones (mejor si es grafico... )  para crear la politica porque yo hice las instruciones. .por medio del regedit

     

    Saludos

    lunes, 12 de mayo de 2008 18:51