Un VBScript para completar la aplicación de Recetas



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.




No hay comentarios:

Publicar un comentario