Me pasan una aplicación llamada Recetas que se ha de montar con un RemoteApp (cómo montar aplicaciones en RemoteApp ver este link)
Instalo la aplicación con un usuario administrador y monto su respectivo RemoteApp. Al probar con otros usuarios me encuentro que da un error de inicialización. El desarrollador me comenta que esta aplicación no está pensada para entornos multiusuario y que la solución sería crear la estructura de carpetas que se ha creado en AppData del administrador en el resto de usuarios.
Manos a la obra:
- Debemos crear un recurso compartido donde ubicaremos la estructura de carpetas que se ha de traspasar a cada usuario. \\Servidor\RecursoCompartido\Recetas
- Crearemos otro recurso compartido para realizar un backup centralizado de todos los datos. \\Servidor\RecursoCompartido\Backup_Recetas
- Crearemos un grupo de usuarios en el AD para controlar quien puede utilizar la aplicación y a quien se le lanza el VBScript. gAccesoRemotoRecetas
Ahora montamos el VBScript que realizará las siguientes tareas:
- Comprueba la pertenencia a un grupo determinado del usuario actual que será el que ha iniciado sesión.
- Si no tiene la estructura de carpetas realiza una copia de una ubicación "virgen".
- En caso de existir la estructura de carpetas se crea un backup, copia lo que tiene en local a un recurso compartido.
- Lanza la aplicación
El script completo es:
Set objWshNetwork = CreateObject("WScript.Network") Set objFileSystem = CreateObject ("Scripting.FileSystemObject") Dim currentUser ' Identificar al usaurio que ha iniciado sesión currentUser = objWshNetwork.UserName ' Función para averiguar si el usuario pertenece al grupo pasado Function flMemberGroup(strGroup) Dim pathAD Dim objGroup ' Monta la ruta ADSI del usuario pathAD = objWshNetwork.UserDomain & "/" & objWshNetwork.UserName Set objUser = GetObject("WinNT://" & pathAD & ",user") ' En este bucle vamos recorriendo uno a uno los grupos a los que pertenece el usuario For Each objGroup In objUser.Groups ' Si el grupo coincide con el recibido como parámetro salimos de la función devolviendo True If StrComp(strGroup, objGroup.Name, vbTextCompare) = 0 Then flMemberGroup =True Exit Function End If Next ' Hemos terminado el bucle = no se ha encontrado al usuario actual en el grupo pasado flMemberGroup = False End Function Sub main Dim pathSource Dim pathDestination Dim pathBackup pathSource = "\\Servidor\RecursoCompartido\Recetas" pathDestination = "C:\Users\" & currentUser & "\AppData\Roaming\Recetas" pathBackup = "\\Servidor\RecursoCompartido\backupRecetas\" & Day(Now) & "_" & currentUser ' Comprobamos si el usaurio actual pertenece al grupo permitido If flMemberGroup("gAccesoRemotoRecetas") = True Then If objFileSystem.FolderExists (pathDestination) = False Then ' Si la carpeta destino NO existe se copia la aplicación inical objFileSystem.CopyFolder pathSource, pathDestination Else ' Si la carpeta destino SI existe se traspasan los datos a una ' ubicación central para backup a cinta ' Realizar backup objFileSystem.CopyFolder pathSource, pathBackup End If launchRecetas End if End Sub ' Ejecutamos el Sub main
Dejamos el VBS en la ruta de instalación de la aplicación (C:\Program Files (x86)\Aplicación de Receta), dentro de una nueva carpeta que llamaremos LaunchRecetas. Montamos el RemoteApp pero en lugar de apuntar a Recetas.exe debemos apuntar al script que cuando evalue todos los pasos ejecutará el exe.
Creamos el msi o rdp correspondiente y comprobamos que todo funciona como debe.
Tened en cuenta que solo funcionará si el usaurio pertenece al grupo que hayamos definido y a primer nivel, es decir el script no comprueba usuarios que pertenezcan a un grupo dentro del indicado.
Tened en cuenta que solo funcionará si el usaurio pertenece al grupo que hayamos definido y a primer nivel, es decir el script no comprueba usuarios que pertenezcan a un grupo dentro del indicado.
No hay comentarios:
Publicar un comentario