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