Actualizar DLL mediante script

Con este script se des-registra, sobreescribe y registra una dll, el proceso se automatiza mediante script de inicio de AD.



Consideraciones previas y entorno
  • El script se pondrá en las politicas de grupo (script de inicio) en Active Directory.
  • Es necesaria una carpeta de acceso público donde se alojarán la dll a actualizar.
  • En este caso el usario que ejecuta el script no tiene privilegios sobre la carpeta destino local, por lo que se han de cambiar los permisos de la carpeta destino antes y despues de la distribución.
  • Se actualiza la dll en función de la versión de la misma.
Definición de los elementos
  • Ruta donde se ubica la dll en el equipo local:  "C:\KewaN\DIKewanReportsV3.dll"
  • Ruta carpeta compartida que aloja la dll a distribuir:  "\\Servidor\KEWAN\DIKewanReportsV3.dll"
  • La escritura de Log es opcional, solo es un registro de control de actualización.
Script:
Set objFS = CreateObject("Scripting.FileSystemObject")

'------------------ACTUALIZACION DLL--------------------------------------------
Sub Principal

'Definicion de objeto para la ejecución de comandos shell
Set objShell = CreateObject("WScript.Shell")

    'Definicion de ubicacion de dll KewanReports
    Dim rutaLocal 
    rutaLocal= "C:\KewaN\DIKewanReportsV3.dll"
    Dim rutaRemota
    rutaRemota= "\\Servidor\KEWAN\DIKewanReportsV3.dll"
    Dim versioninstalada
    versioninstalada = objfs.GetFileVersion(rutaLocal)
    Dim versionvigente
    versionvigente = "18.5.0.0"
        
    If versioninstalada <> versionvigente Then
        'Concecer permisos sobre C:\Kewan 

        'para el grupo Todos con Control Total
        objShell.Run "cacls C:\Kewan /T /E /G Todos:C"    
        
        'Establece una pause para que finalice el 

        'proceso de cambio de permisos
         WScript.Sleep(2000)                  
         Select Case objFS.FileExists(rutaLocal)
             Case True
                'Des-Registra dll local
                objShell.Run "regsvr32.exe " & rutaLocal & " /s /U"                     
                'Elimina dll local 
                objFS.DeleteFile  rutaLocal, Y
                Principal
                    
            Case False     
                'Copia la dll de la version nueva       
                objFS.CopyFile rutaRemota, rutaLocal           
                'Registra dll vigente
                objShell.Run "regsvr32.exe " & rutaLocal    & " /s"
                'Llamar a la escritura del log pasando 

                'la version de la dll local
                KewanReport_Log    ()                  
        End select
        
        WScript.Sleep(2000)

        objShell.Run "regsvr32.exe " & rutaLocal    & " /s"
        
        'Revocar permisos en C:\Kewan para el grupo Todos
        objShell.Run "cacls c:\Kewan /E /R Todos"

    End if    
End Sub
    
'------------------ESCRITURA LOG--------------------------------------------
Sub KewanReport_Log ()
    Const ForAppending = 8
    'Define el archivo log
    Dim rutaLog
    rutaLog = "\\Servidor\KEWAN\KewanReport_Log.txt"
    
    'Apertura de archivo log en modo Appendig 

    '(=>inserta texto en última linea)
    Set objFile = objFS.OpenTextFile (rutaLog, ForAppending)
    
    'Obtener direccion IP y nombre de la maquina donde se ejecuta el script
    Set colAdapters = GetObject ("winmgmts:" & "!\\.\root\cimv2").ExecQuery _
       ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
        
        Dim dirIP 
        For Each objAdapter in colAdapters  
            'Lista las direcciones IP de la maquina
            For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress)
                dirIP =  objAdapter.IPAddress(i)
            Next
        'Introduce los valores recogidos de la maquina a un archivo de texto 
        objFile.WriteLine Date & "," & Time  & "," & _

              objAdapter.DNSHostName & "," & dirIP
        objFile.Close
    Next
End Sub 

 

' Ejecución de procedimientos


Principal
KewanReport_Log

No hay comentarios:

Publicar un comentario