Consideraciones previas y entorno
- La carpeta origen será una carpeta compartida con acceso, mínimo de solo lectura, para aquellos usuarios que deban acceder a ella, en mi caso Usuarios del Dominio. \\Servidor_Repositorio\Carpeta_Accesos_Directos\
- La carpeta destino será el escritorio del usuario y que en este escenario esta carpeta está redireccionada, mediante GPO, a un servidor, de tal forma que cada usuario tiene su escritorio en la siguiente ruta: \\Servidor_Usuarios\Carpeta_Perfiles\Nombre_Perfil\Escritorio
- Mediante GPO se indica la ejecución del script en el inicio de sesión y a nivel de usuario. GPO_Icono
- Se han de crear grupos de usuarios que albergarán los usuarios a los que distribuir los iconos. grupo_1, grupo_2, grupo_n
Descripción de todo el proceso
- El usuario inicia sesión en un equipo que tenga apliacada la política GPO_Icono.
- El script comienza la ejecución.
- Se crean los objetos, se definen las variables, etc.
- Se realiza la función fl_Es_Miembro que obtiene el nombre de usuario que se ha iniciado sesión en el equipo y averigua los grupos a los que pertenece.
- Entra en el procedimiento Icono_1
- Define el origen y destino, esta definición se realiza a nivel de procedimiento para tener la posibilidad de realizar creaciones de iconos de distintos orígenes y destinos
- Mediante una condición If se interroga si el usuario pertenece al grupo_1 o al grupo_2 y así sucesivamente.
- Si pertenece comprueba que el icono no se haya creado con anterioridad. Si existe en la ruta destino sale del procedimiento
- Si no pertenece a los grupos especificados se procederá a la eliminación del destino en caso de que exista el archivo. De esta forma podemos podemos gestionar los iconos mediante grupos de Active Directory.
- Entra en el procedimiento Icono_2 que realizará las mismas operaciones que el anterior pero con iconos y grupos de usuarios distintos
' Creación de objeto usado en la copia del archivo Set oFS = CreateObject("Scripting.FileSystemObject") ' Crea el objeto para sacar el usuario actual con WshNetwork.UserName Set WshNetwork = WScript.CreateObject("WScript.Network") ' Funcion para definir la pertenencia del usuario al grupos de AD ' Esta funcion indica si un usuario pertenece a un grupo pasado Function fl_Es_Miembro(str_Grupo) Dim str_ADs_Path ' Cadena utilizada para generar la ruta ADSI del usuario Dim obj_Usuario ' Objeto que se cargará con la información del usuario Dim obj_Grupo ' Objeto para cada cargar la información de un grupo Dim obj_Net ' Objeto Network del que partimos para obtener el objeto usuario ' Creacion el objeto Network Set obj_Net = CreateObject("Wscript.Network") ' Montar la ruta ADSI del usuario str_ADs_Path = obj_Net.UserDomain & "/" & obj_Net.UserName ' Crear objeto usuario Set obj_User = GetObject("WinNT://" & str_ADs_Path & ",user") ' En este bucle vamos recorriendo uno a uno los grupos a los que pertenece el usuario For Each obj_Grupo In obj_User.Groups ' Si el grupo coincide con el recibido como parámetro sale de la función ' devolviendo True If StrComp(str_Grupo, obj_Grupo.Name, vbTextCompare) = 0 Then fl_Es_Miembro =True Exit Function End If Next ' Si hemos terminado el bucle, es porque no se ha encontrado el grupo recibido entre ' aquellos a los que pertenece el usuario, la devolución de esta función será False fl_Es_Miembro = False End Function Sub Icono_1 ' Definir origen de copia y destino Dim str_origen Dim str_destino str_origen = "\\Servidor_Repositorio\Carpeta_Accesos_Directos\Icono_1.url" str_destino = "\\Servidor_Usuarios\Carpeta_Perfiles\" & WshNetwork.UserName & "\Escritorio\Icono_1.url" ' Asignacion de icono para los grupos indicados If fl_Es_Miembro("grupo_1") = True Or _ fl_Es_Miembro("grupo_2")= True Or _ fl_Es_Miembro("grupo_n")= True Then ' Comprobar existencia del archivo destino para omitir la copia If oFS.FileExists(str_destino) = True Then End If If oFS.FileExists(str_destino) = False Then ' Realiza la copia de archivo oFS.CopyFile str_origen , str_destino End If End If ' Eliminacion del icono sino pertenece a los grupos indicados If (fl_Es_Miembro("grupo_1") = False Or _ fl_Es_Miembro("grupo_2") = False Or _ fl_Es_Miembro("grupo_n")) = False Then If (oFS.FileExists(str_destino)) = True Then oFS.DeleteFile str_destino End If End If End sub Sub Icono_2 ' Definir origen de copia y destino Dim str_origen Dim str_destino str_origen = "\\Servidor_Repositorio\Carpeta_Accesos_Directos\Icono_2.url" str_destino = "\\Servidor_Usuarios\Carpeta_Perfiles\" & WshNetwork.UserName & "\Escritorio\Icono_2.url" ' Asignacion de icono para los grupos indicados If fl_Es_Miembro("grupo_1") = True Or _ fl_Es_Miembro("grupo_2")= True Or _ fl_Es_Miembro("grupo_n")= True Then ' Comprobar existencia del archivo destino para omitir la copia If oFS.FileExists(str_destino) = True Then End If If oFS.FileExists(str_destino) = False Then ' Realiza la copia de archivo oFS.CopyFile str_origen , str_destino End If End If ' Eliminacion del icono sino pertenece a los grupos indicados If (fl_Es_Miembro("grupo_1") = False Or _ fl_Es_Miembro("grupo_2") = False Or _ fl_Es_Miembro("grupo_n")) = False Then If (oFS.FileExists(str_destino)) = True Then oFS.DeleteFile str_destino End If End If End sub ' Ejecución de Procedimientos Icono_1 Icono_2
No hay comentarios:
Publicar un comentario