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