Script VbScript Para Listar Los Usuarios Miembros De Un Grupo
Posted by urpiano en Jueves 18 \18\+01:00 marzo \18\+01:00 2010
Este script nos permite listar los usuarios que peretenecen a un grupo que se recibe como parámetro, ya sea en su nombre NT como en su nombre distinguido. Recibe también un nombre de carpeta en la que creará un fichero de valores separados por tabuladores con la lista de usuarios
Sintaxis
cscript [//nologo] Listar-MiembrosDeGrupo.vbs [/C:carpeta_salida] [/NT:nombre_nt] [/DN:nombre_distinguido] [/?]
Siendo
Etiqueta | Dato | ¿Requerido? | Descripción |
C | carpeta_salida | No |
Nombre de la carpeta en la que se guardará el fichero con los resultados. Si no existe será creada. Si se omite, los resultados se muestran por pantalla. El nombre del fichero generado será la fecha y hora en formato YYYYMMDD_HHMM seguido del nombre NetBios del grupo recibido como parámetro, con extensión tab (por ejemplo: 20100318_1233_AccesoCPD.tab).
|
NT | nombre_nt | No |
Nombre NetBios del grupo (dominio\grupo). En caso de contener espacios, debera ser encerrado entre comillas. Si se omite se esperará el nombre distinguido, si este tampoco es pasado el script terminará mostrando un error.
|
DN | nombre_distinguido | No |
Nombre distinguido del grupo (cn=grupo,ou=ou,dc=dominio,dc=local). En caso de contener espacios, debera ser encerrado entre comillas. Si se omite se esperará el nombre NetBios, si este tampoco es pasado el script terminará mostrando un error.
|
? | No |
Muestra la ayuda en línea.
|
Ejemplos:
– Se creará un fichero de exportación de los usuarios del grupo TIA\Agentes en la carpeta d:\DatosAcceso:
cscript //nologo Listar-MiembrosDeGrupo.vbs /C:d:\DatosAcceso /NT:TIA\Agentes
– Se creará un fichero de exportación de los usuarios del grupo cn=Agentes,OU=usuarios,DC=tia,DC=org en la carpeta d:\DatosAcceso:
cscript //nologo Listar-MiembrosDeGrupo.vbs /C:d:\DatosAcceso /DN:cn=Agentes,OU=usuarios,DC=tia,DC=org
Este es el código del script
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* listar-MiembrosDeGrupo.vbs *
'* *
'* Este script nos permite listar los usuarios que pertenecen a un *
'* grupo que se recibe como parámetro, ya sea en su nombre NT como en *
'* su nombre distinguido. Recibe también un nombre de carpeta en la *
'* que creará un fichero de valores separados por tabuladores con la *
'* lista de usuarios *
'* *
'* Sintaxis *
'* *
'* cscript [//nologo] listar-caducidad-password-ad.vbs *
'* [/C:carpeta_salida] [/NT:nombre_nt | /DN:nombre_distinguido] [/?] *
'* *
'* Siendo *
'* *
'* - /C: carpeta_salida (Opcional): *
'* Nombre de la carpeta en la que se guardará el fichero con *
'* los resultados. Si no existe será creada. Si se omite, los *
'* resultados se muestran por pantalla. El nombre del fichero *
'* generado será la fecha y hora en formato YYYYMMDD_HHMM *
'* seguido del nombre NetBios del grupo recibido como *
'* parámetro, con extensión tab (por ejemplo: *
'* 20100318_1233_AccesoCPD.tab). *
'* *
'* - /NT: nombre_nt (Opcional): *
'* Nombre NetBios del grupo (dominio\grupo). En caso de *
'* contener espacios, debera ser encerrado entre comillas. Si *
'* se omite se esperará el nombre distinguido, si este tampoco *
'* es pasado el script terminará mostrando un error. *
'* *
'* - /DN: nombre_distinguido (Opcional): *
'* Nombre distinguido del grupo *
'* (cn=grupo,ou=ou,dc=dominio,dc=local). En caso de contener *
'* espacios, debera ser encerrado entre comillas. Si se omite *
'* se esperará el nombre NetBios, si este tampoco es pasado el *
'* script terminará mostrando un error. *
'* *
'* - /?: ayuda (Opcional): *
'* Muestra la ayuda en línea *
'* *
'* *
'* Ejemplos: *
'* *
'* - Se creará un fichero de exportación de los usuarios del grupo *
'* TIA\Agentes en la carpeta d:\DatosAcceso: *
'* *
'* cscript //nologo listar-miembrosdegrupo.vbs /C:d:\DatosAcceso *
'* /NT:TIA\Agentes *
'* *
'* - Se creará un fichero de exportación de los usuarios del grupo *
'* cn=Agentes,OU=usuarios,DC=tia,DC=org en la carpeta d:\DatosAcceso: *
'* *
'* cscript //nologo listar-miembrosdegrupo.vbs /C:d:\DatosAcceso *
'* /DN:cn=Agentes,OU=usuarios,DC=tia,DC=org *
'* *
'* *
'* © Fernando Reyes *
'* Marzo De 2010 *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'Exigimos la declaración de variables
Option Explicit
Dim str_Error 'As String
Dim int_Error 'As String
Dim str_Carpeta 'As String
Dim str_Grupo 'As String
Dim str_GrupoNT 'As String
Dim obj_FS 'As FileSystemObject
Dim obj_TS 'As TextStream
Dim str_Fichero 'As String
Dim dic_Grupos 'As Dictionary
Dim dic_Usuarios 'As Dictionary
Dim obj_Grupo 'As Object
'Validamos los argumentos y almacenamos sus valores
If f_RevisarArgumentos( _
str_Error, _
int_Error) Then
Call s_Ayuda(str_Error)
WScript.Quit int_Error
End If
'Creamos los diccionarios de grupos y usuarios
Set dic_Grupos = CreateObject("Scripting.Dictionary")
Set dic_Usuarios = CreateObject("Scripting.Dictionary")
'Establecemos que las comparaciones de los diccionarios no sean
'sensibles al caso
dic_Grupos.CompareMode = vbTextCompare
dic_Usuarios.CompareMode = vbTextCompare
'Obtenemos el grupo recibido como parámetro con el proveedor LDAP
Set obj_Grupo = GetObject("LDAP://" & str_Grupo)
'Agregamos el nombre de NT del grupo al diccionario. Usaremos éste
'como clave del elemento del diccionario, al ser único en el dominio
dic_Grupos.Add obj_Grupo.sAMAccountName, True
'Si la salida no es a fichero, mostramos los encabezados
If Len(str_Fichero) = 0 Then _
WScript.Echo "sAMAccountName" & vbTab & _
"DN" & vbTab & _
"Apellidos" & vbTab & _
"Nombre" & vbTab & _
"UAC" & vbTab & _
"Grupo" & vbTab & _
"SubGrupo"
'Llamamos al método que realiza la enumeración
Call s_EnumeraMiembros(obj_Grupo)
Sub s_EnumeraMiembros(pobj_Grupo)
'***********************************************************************
'* Procedimiento: s_EnumeraMiembros *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 16/03/2010 16:48:01 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este método recibe un objeto de grupo de Active *
'* Directory y enumera los usuarios que son miembros *
'* de él y los de los grupos que contenga *
'***********************************************************************
Dim obj_Miembro 'As Object
Dim str_NombreNT 'As String
Dim str_NombreDN 'As String
Dim str_Nombre 'Às String
Dim str_Apellidos 'As String
Dim int_UAC 'As String
Dim str_Linea 'As String
Dim str_Habilitada 'As String
Dim str_CaducaEl 'As String
'Recorremos los miembros del grupo
For Each obj_Miembro In pobj_Grupo.Members
'Sólo nos interesan aquellos miembros que sean usuarios y no
'hayan sido ya enumerados
If LCase(obj_Miembro.Class) = "user" _
And (dic_Usuarios.Exists( _
obj_Miembro.sAMAccountName) = False) Then
'Vaciamos las variables en las que iremos almacenando los
'atributos del usuario. Esto lo hacemos para evitar que
'al recoger los atributos que no tengan contenido (dan error
'al intentar leerlos) el usuario presente los atributos del
'usuario anterior a él que sí los tenía (lo provoca el
'On error Resume Next).
str_NombreNT = ""
str_NombreDN = ""
str_Nombre = ""
str_Apellidos = ""
int_UAC = 0
str_Habilitada = "True"
str_CaducaEl = ""
'Necesitamos saltarnos los errores al leer atributos vacíos
On Error Resume Next
'Almacenamos en las variables los atributos
str_NombreNT = obj_Miembro.sAMAccountName
str_NombreDN = obj_Miembro.distinguishedName
str_Nombre = obj_Miembro.FirstName
str_Apellidos = obj_Miembro.sn
int_UAC = obj_Miembro.UserAccountControl
If obj_Miembro.AccountDisabled Then str_Habilitada = "False"
str_CaducaEl = Year(obj_Miembro.AccountExpirationDate) & _
Right("00" & _
Month( _
obj_Miembro.AccountExpirationDate),2) & _
Right("00" & _
Day( _
obj_Miembro.AccountExpirationDate),2)
If Year(obj_Miembro.AccountExpirationDate) <= 1970 Then _
str_CaducaEl = ""
'Limpiamos el objeto Err por si se habían producido errores
Err.Clear
'Devolvemos el control de errores a CScript
On Error Goto 0
'Montamos la linea de salida
str_Linea = str_NombreNT & vbTab & _
str_NombreDN & vbTab & _
str_Nombre & vbTab & _
str_Apellidos & vbTab & _
int_UAC & vbTab & _
str_Habilitada & vbTab & _
str_CaducaEl & vbTab & _
str_GrupoNT & vbTab & _
f_NTaDN("",pobj_Grupo.distinguishedName)
'Se produce la salida, por pantalla o por fichero, según fue
'la llamada al script. Si el nombre de fichero no está vacío
'hay que escribir en él, en caso contrario mostrar por pantalla
If Len(str_Fichero) > 0 Then
obj_TS.WriteLine str_Linea
Else
WScript.Echo str_Linea
End If
'Agregamos al usuario al diccionario de usuarios
dic_Usuarios.Add obj_Miembro.sAMAccountName, True
'Si el objeto es un grupo, deberemos realizar una llamada
'recursiva
ElseIf (LCase(obj_Miembro.Class) = "group") Then
'Evitaremos los grupos que ya se han enumerado, para que
'no se produzca un bucle infinito
If (dic_Grupos.Exists( _
obj_Miembro.sAMAccountName) = False) Then
'Agregamos el grupo al diccionario para evitar una
'segunda llamada sobre él
dic_Grupos.Add obj_Miembro.sAMAccountName, True
'Realizamos una llamada recursiva para obtener los
'miembros del grupo
Call s_EnumeraMiembros(obj_Miembro)
End If
End If
Next 'pobj_Grupo.Members
End Sub 's_EnumeraMiembros
Function f_RevisarArgumentos( _
str_Error, _
int_Error _
) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 16/03/2010 14:19:36 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función revisa los argumentos recibidos, *
'* recogiendo los posibles fallos por falta de *
'* argumentos requeridos y almacenando en las *
'* variables correspondientes los argumentos *
'* recibidos. recibe dos parámetros cuyo fin es ser de *
'* salida: una cadena que almacenará los errores *
'* detectados y un entero que almacenará el código de *
'* los errores detectados. Hay tres tipos de error; *
'* error 1 para los argumentos sin nombre requeridos y *
'* no encontrados, error 2 para los argumentos con *
'* nombre requeridos y no encontrados, por último, *
'* error 4 para los combos de argumentos opcionales *
'* (un combo de argumentos opcionales es aquel *
'* conjunto de argumentos opcionales que es requerido *
'* que se pase al menos uno de ellos y que si se pasa *
'* más de uno se ignorarán aquellos que estén detrás *
'* en la prioridad entre ellos; una característica *
'* clara de lo que es un combo de argumentos es cuando *
'* dos omás argumentos almacenan su valor en la misma *
'* variable). En el caso de producirse más de un tipo *
'* de error, el número de error será la suma de ambos *
'* de los errores recibidos, es decir 3, 5 o 6 *
'***********************************************************************
Dim bol_Devolucion 'As Boolean
Dim bol_Error1 'As Boolean
Dim bol_Error2 'As Boolean
Dim bol_Error4 'As Boolean
Dim dt_Ahora 'As DateTime
'Iniciamos los indicadores
bol_Devolucion = False
bol_Error1 = False
bol_Error2 = False
bol_Error4 = False
'Si hay que mostrar la ayuda, se muestra y
'termina el script
If WScript.Arguments.Named.Exists("?") Then
Call s_Ayuda("******************" & vbCrLf & _
"* AYUDA *" & vbCrLf & _
"******************")
WScript.Quit 0
End If
'Creamos un objeto FileSystemObject
Set obj_FS = CreateObject("Scripting.FileSystemObject")
'Revisamos si ha sido pasado el argumento
'/NT (nombre_nt)
If WScript.Arguments.Named.Exists("NT") Then
'Almacenamos el nombre NT
str_GrupoNT = WScript.Arguments.Named("NT")
'Obtenemos el nombre distinguido
str_Grupo = f_NTaDN(str_GrupoNT,"")
'Quitamos el nombre de dominio al nombre NT
str_GrupoNT = obj_FS.GetFileName(str_GrupoNT)
'Revisamos si ha sido pasado el argumento
'/DN (nombre_distinguido)
Elseif WScript.Arguments.Named.Exists("DN") Then
'Almacenamos el nombre distinguido
str_Grupo = WScript.Arguments.Named("DN")
'Obtenemos el nombre NT
str_GrupoNT = f_NTaDN("",str_Grupo)
Else
str_Error = str_Error & _
"Error 4: No se ha pasado " & _
"ninguno de los argumentos" & _
" integrantes de un combo " & _
"de argumentos. En un comb" & _
"o de argumentos todos los" & _
" argumentos son opcionale" & _
"s, sin embargo debe ser p" & _
"asado uno al menos; si se" & _
" pasa más de uno, sólo se" & _
" tendrá en cuenta uno, el" & _
" primero en el orden de a" & _
"rgumentos del combo. En e" & _
"ste caso los argumentos q" & _
"ue integran el combo son " & _
"(en orden de prioridad): "
str_Error = str_Error & _
"""/NT""" & _
" y ""/DN""" & vbCrLf
bol_Error4 = True
End If
'Revisamos que esté el argumento
'/C (carpeta_salida)
If WScript.Arguments.Named.Exists("C") Then
'Almacenamos la carpeta recibida en la variable
str_Carpeta = WScript.Arguments.Named("C")
'Nos aseguramos de que termine en slash inverso
If Right(str_Carpeta, 1) <> "\" Then _
str_Carpeta = str_Carpeta & "\"
'Obtenemos la fecha y hora
dt_Ahora = Now
'Montamos el nombre del equipo de la siguiente forma:
'fecha y hora en formato YYYYMMDD_HHMM_ y nombre NT
'del grupo que se consultará, con extensión TAB; por ejemplo
'20100318_0905_Operadores.tab
str_Fichero = Year(dt_Ahora) & _
Right("00" & Month(dt_ahora),2) & _
Right("00" & Day(dt_ahora),2) & _
"_" & _
Right("00" & Hour(dt_ahora),2) & _
Right("00" & Minute(dt_ahora),2) & _
"_" & _
Replace(str_GrupoNT,"\","¬") & _
".tab"
'Establecemos control de errores
On Error Resume Next
'Creamos la carpeta
obj_FS.CreateFolder(str_Carpeta)
'Si la carpeta ya existía, se produjo un error; limpiamos el objeto
'Err
Err.Clear
'Devolvemos el control de errores a CScript
On Error Goto 0
'Creamos el fichero de salida
Set obj_TS = obj_FS.CreateTextFile(str_Carpeta & str_Fichero, True)
'Le ponemos los encabezados de campos
obj_TS.WriteLine "sAMAccountName" & vbTab & _
"DN" & vbTab & _
"Apellidos" & vbTab & _
"Nombre" & vbTab & _
"UAC" & vbTab & _
"Habilitada" & vbTab & _
"CaducaEl" & vbTab & _
"Grupo" & vbTab & _
"SubGrupo"
Else
str_Carpeta = ""
str_Fichero = ""
End If
'Preparamos las variables de devolucion:
'el entero como suma de los posibles errores 1, 2 y 4
int_Error = Abs(bol_Error1) + _
(2 * Abs(bol_Error2)) + _
(4 * Abs(bol_Error4))
'La devolucion de la función será True en caso de
'haber alguno de los errores
bol_Devolucion = (bol_Error1 Or bol_Error2 Or bol_Error4)
'Hacemos la devolución de la función
f_RevisarArgumentos = bol_Devolucion
End Function 'f_RevisarArgumentos
Sub s_Ayuda(str_Error)
'***********************************************************************
'* Procedimiento: s_Ayuda *
'* Tipo : Sub *
'* Devolución : *
'* Fecha y Hora : 16/03/2010 14:19:36 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este procedimiento muestra la ayuda en línea. *
'* Recibe un parámetro de tipo cadena que si viene *
'* será mostrado antes de la línea; pensado para que *
'* se muestre un error que se haya detectado. *
'***********************************************************************
'Si hay que mostrar algún texto previo a la ayuda, lo hacemos
If Len(str_Error) > 0 Then
WScript.Echo str_Error & vbCrLf & vbCrLf
End If
'A continuación, mostramos la ayuda por pantalla
WScript.Echo "Este script nos permite listar los usuarios que p" & _
"ertenecen a un grupo que se"
WScript.Echo "recibe como parámetro, ya sea en su nombre NT com" & _
"o en su nombre distinguido."
WScript.Echo "Recibe también un nombre de carpeta en la que cre" & _
"ará un fichero de valores"
WScript.Echo "separados por tabuladores con la lista de usuarios"
WScript.Echo ""
WScript.Echo "Sintaxis"
WScript.Echo ""
WScript.Echo "cscript [//nologo] listar-miembrosdegrupo.v" & _
"bs [/C:carpeta_salida]"
WScript.Echo "[/NT:nombre_nt | /DN:nombre_distinguido] [/?]"
WScript.Echo ""
WScript.Echo "Siendo"
WScript.Echo ""
WScript.Echo "- /C: carpeta_salida (Opcional):"
WScript.Echo "Nombre de la carpeta en la que se guardará el fic" & _
"hero con los"
WScript.Echo "resultados. Si no existe será creada. Si se omite" & _
", los"
WScript.Echo "resultados se muestran por pantalla. El nombre de" & _
"l fichero"
WScript.Echo "generado será la fecha y hora en formato YYYYMMDD" & _
"_HHMM seguido"
WScript.Echo "del nombre NetBios del grupo recibido como paráme" & _
"tro, con"
WScript.Echo "extensión tab (por ejemplo: 20100318_1233_AccesoC" & _
"PD.tab)."
WScript.Echo ""
WScript.Echo "- /NT: nombre_nt (Opcional):"
WScript.Echo "Nombre NetBios del grupo (dominio\grupo). En caso" & _
" de contener"
WScript.Echo "espacios, debera ser encerrado entre comillas. Si" & _
" se omite se"
WScript.Echo "esperará el nombre distinguido, si este tampoco e" & _
"s pasado el"
WScript.Echo "script terminará mostrando un error."
WScript.Echo ""
WScript.Echo "- /DN: nombre_distinguido (Opcional):"
WScript.Echo "Nombre distinguido del grupo"
WScript.Echo "(cn=grupo,ou=ou,dc=dominio,dc=local). En caso de " & _
"contener"
WScript.Echo "espacios, debera ser encerrado entre comillas. Si" & _
" se omite se"
WScript.Echo "esperará el nombre NetBios, si este tampoco es pa" & _
"sado el script"
WScript.Echo "terminará mostrando un error."
WScript.Echo ""
WScript.Echo "- /?: ayuda (Opcional):"
WScript.Echo "Muestra la ayuda en línea"
WScript.Echo ""
WScript.Echo ""
WScript.Echo "Ejemplos:"
WScript.Echo ""
WScript.Echo "- Se creará un fichero de exportación de los usua" & _
"rios del grupo TIA\Agentes en"
WScript.Echo "la carpeta d:\DatosAcceso:"
WScript.Echo ""
WScript.Echo "cscript //nologo listar-miembrosdegrupo.vbs" & _
" /C:d:\DatosAcceso"
WScript.Echo "/NT:TIA\Agentes"
WScript.Echo ""
WScript.Echo "- Se creará un fichero de exportación de los usua" & _
"rios del grupo"
WScript.Echo "cn=Agentes,OU=usuarios,DC=tia,DC=org en la carpet" & _
"a d:\DatosAcceso:"
WScript.Echo ""
WScript.Echo "cscript //nologo listar-miembrosdegrupo.vbs" & _
" /C:d:\DatosAcceso"
WScript.Echo "/DN:cn=Agentes,OU=usuarios,DC=tia,DC=org"
WScript.Echo ""
WScript.Echo ""
WScript.Echo ""
End Sub 's_Ayuda
Function f_NTaDN(str_RutaNT, str_DN) 'As String
'***********************************************************************
'* Procedimiento: f_NTaDN *
'* Tipo : Función *
'* Devolución : Cadena *
'* Fecha y Hora : May 2007 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función recibe o bien el nombre NT *
'* ("dominio\nombre"), como primer parámetro, de un *
'* objeto de dominio y devuelve el nombre distinguido *
'* de ese objeto, o bien el nombre distinguido de un *
'* objeto, como segundo parámetro, y devuelve el *
'* nombre NT. *
'* Basada en el código de Richard Mueller, MVP de *
'* Scripting y ADSI (http://www.rlmueller.net) *
'***********************************************************************
'Constantes para el objeto NameTranslate
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
Dim obj_TraductorDeNombres
Dim int_De, int_A,str_Nombre
If Len(str_RutaNT) > 0 Then
int_De = ADS_NAME_TYPE_NT4
int_A = ADS_NAME_TYPE_1779
str_Nombre = str_RutaNT
ElseIf Len(str_DN) > 0 Then
int_De = ADS_NAME_TYPE_1779
int_A = ADS_NAME_TYPE_NT4
str_Nombre = str_DN
Else
WScript.Echo "Error 1 en f_NTaDN: No se ha pasado " & _
"ningún nombre para traducir."
Exit Function
End If
'Creamos el objeto NameTranslate.
Set obj_TraductorDeNombres = CreateObject("NameTranslate")
On Error Resume Next
'Lo iniciamos localizando el catálogo global
obj_TraductorDeNombres.Init ADS_NAME_INITTYPE_GC, ""
'Establecemos el parámetro de nombre en el traductor de nombres
obj_TraductorDeNombres.Set int_De, str_Nombre
'Usamos el método Get del traductor de nombres para obtener el
'nombre traducido
f_NTaDN = obj_TraductorDeNombres.Get(int_A)
On Error GoTo 0
'Limpieza de kks :-)
Set obj_TraductorDeNombres = Nothing
End Function 'f_NTaDN
Aldo said
Sr :urpiano
Tengo un gran problema que no lo puedo solucionar quiero resolver este grupo BUILTIN\Usuarios ,NT AUTHORITY\SYSTEM, BUILTIN\Administradores,y no consigo convertir a un nombre distinguido con tu funcion f_NTaDN(str_RutaNT, str_DN) para poder asi tener los miemnros que pertenecen a este grupo y use su script para poder sacar los miembros que pertenecen a un grupo y tambien me da error …..
urpiano said
Aldo,
No vas a poder obtener el nombre distinguido de esos usuarios, pues no son usuarios de active directory, si no principios de autoridad. Esa función está pensada para partir de, por ejemplo TIA\mortadelo y obtener CN=Mortadelo,OU=Agentes,DC=tia,DC=org
Miguel Carrillo (@mcargar) said
no me regresa los datos de usuarios de dominios foraneos!!….por todo lo demas funciona de maravilla.
César said
Buenos días.
He visto un problema que pasa en todos los script, que he visto, de extracción de miembros de grupos. Se da el caso que no se sacan todos los miembros del grupo. Los usuarios en los que este especificado como grupo primario, el grupo del que extraes, los miembros no sale en el listado de ese grupo.
http://blogs.technet.com/b/plataformas/archive/2008/09/17/el-caso-del-grupo-de-domain-admins-incompleto.aspx
Ejemplo:
Grupo –> Domain Admins (Grupo que he usado para las pruebas)
Usuarios (Miembros grupo “Domain Admins”):
User1 –> Grupo primario: Domain Users
User2 –> Grupo primario: Domain Users
User3 –> Grupo primario: Domain Admins
User4 –> Grupo primario: Domain Admins
User5 –> Grupo primario: Domain Users
…
Resultado del script: (Usuarios Miembros del grupo “Domain Admins”)
User1
User2
User5
Saludos.
i said
Presque tous ensemble de sa carrière, Crabtree a joué dans un grand système avec les 49ers de San Francisco.
v said
Partager cet article sur Facebook Like Us Et tandis que l’Atletico ne peut pas suivre avec Barcelone ces jours, ils semblent trouver Real Madrid une promenade dans le parc.