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