Creación de iconos de acceso directo en función al grupo de Active Directory que pertenezca el usuario

Este script realizado en Visual Basic Script consulta los grupos de Active Directory y en función a esto se crea ó se elimina un icono de acceso directo.




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
  1. El usuario inicia sesión en un equipo que tenga apliacada la política GPO_Icono.
  2. El script comienza la ejecución.
  3. Se crean los objetos, se definen las variables, etc.
  4. 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.
  5. Entra en el procedimiento Icono_1 
    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
    2. Mediante una condición If se interroga si el usuario pertenece al grupo_1 o al grupo_2 y así sucesivamente.
    3. Si pertenece comprueba que el icono no se haya creado con anterioridad. Si existe en la ruta destino sale del procedimiento
    4. 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.
  6. Entra en el procedimiento Icono_2 que realizará las mismas operaciones que el anterior pero con iconos y grupos de usuarios distintos
Script:


' 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