Vamos a mostrar un script realizado con VBScript que copia ficheros de una ubicación de red a una local.
Me 'solicitaron' que se distribuyera de manera urgente la última versión de una aplicación a todos los equipos de la red. Dicha aplicación no disponía de paquete de instalación ni tampoco de un sistema de actualización propio.
Opté por la realización de un script mediante VBScript y colocar este en la GPO general para que se lanzará en cada inicio de sesión de los usuarios.
Los requisitos de la aplicación y la creación de un icono de acceso directo en el escritorio ya estaba cubiertos con antelación por lo que no se realizó en el script.
Requisitos previos:
- Repositorio de la actualización. Debe ser una ubicación accesible para todos los usuarios implicados, al menos de lectura.
- Herramienta para editar VBScript. Personalmente uso VBSEdit es de pago aunque se pueden encontrar opciones libres.
Primero comprobamos si la carpeta local existe, en caso contrario copiamos la carpeta del repositorio en el recurso compartido al equipo local.
En caso que la carpeta exista en el equipo se comprueba si la versión que tiene es la correcta, esto se comprueba mediante un archivo de texto que gestiona la versión a distribuir. Comprobamos que el archivo con extensión .jmb del equipo local es idéntico al del repositorio en caso contrario se borra la carpeta y se copia del repositorio.
Es importante la línea que cambia los permisos sobre la carpeta de aplicación para que el usuario pueda tener acceso a la carpeta de aplicación, se usa el comando de la shell de Windows calcs y se permite control total a todos los usuario.
Para terminar se crea un pequeño registro para controlar el script de actualización. En él registramos la fecha y hora así como el nombre DNS del equipo y la dirección IP del mismo.
Para terminar se crea un pequeño registro para controlar el script de actualización. En él registramos la fecha y hora así como el nombre DNS del equipo y la dirección IP del mismo.
' Definicion de objeto para la ejecución de comandos shell Set objShell = CreateObject("WScript.Shell") ' Definicion de objeto para uso de sisrtema de archivos Set objFileSystem = CreateObject("Scripting.FileSystemObject") ' Definir ubicacion de aplicacion en cliente Dim rutaAplicacionLocal rutaAplicacionLocal = "C:\Aplicacion" ' Definir repositorio de versiones Dim rutaRepositorioVersiones rutaRepositorioVersiones = "\\SERVIDOR\RecursoCompartido$\Aplicacion_Actualizacion\" ' Definir la version distribuible ' Nota: como no tiene correctamente definido el numero de version ' en el ejecutable recurro a nombre de carpeta = version Dim versionDistribuible versionDistribuible = "99.88.77.66" ' Montar path de ubicacion version distribuible Dim rutaVersionDistribuible rutaVersionDistribuible = rutaRepositorioVersiones & versionDistribuible Sub Update If objFileSystem.FolderExists (rutaAplicacionLocal) = False Then objFileSystem.CreateFolder rutaAplicacionLocal objFilesystem.CopyFolder rutaVersionDistribuible, rutaAplicacionLocal , Y ' Creo archivo con identificativo de version Call createFileVersion ' Concecer permisos sobre ruta apl. local para el grupo Todos con Control Total objShell.Run "cacls " & rutaAplicacionLocal & " /T /E /G Todos:C" Else If objFilesystem.FileExists ("\Aplicacion_version_" & versionDistribuible & ".jmb") = False Then ' Concecer permisos sobre ruta apl. local para el grupo Todos con Control Total objShell.Run "cacls " & rutaAplicacionLocal & " /T /E /G Todos:C" objFilesystem.DeleteFolder rutaAplicacionLocal, Y objFileSystem.CreateFolder rutaAplicacionLocal objFilesystem.CopyFolder rutaVersionDistribuible, rutaAplicacionLocal , Y ' Creo archivo con identificativo de version Call createFileVersion End If End If iLog End Sub Sub createFileVersion objfilesystem.CreateTextFile rutaAplicacionLocal & "\Aplicacion_version_" & versionDistribuible & ".jmb", Y End Sub Sub iLog () Const ForAppending = 8 ' Define el archivo log Dim rutaLog rutaLog = "\\SERVIDOR\RecursoCompartido$\aplicacion_Log.txt" ' Apertura de archivo log en modo Appendig (=>inserta texto en la ultima linea) Set objFile = objFileSystem.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 Update
No hay comentarios:
Publicar un comentario