Script VBScript Para Listar El Estado De Los Usuarios Del Dominio
Publicado por urpiano en Lunes 26 de Enero de 2009
Este script muestra el estado de las cuentas de usuario del dominio, si están habilitadas o no. La salida del script puede ser por pantalla o a un fichero de valores separados por tabuladores. Se puede presentar un resumen, en el cual se muestran el número total de cuentas, el número de cuentas deshabilitadas y el número de cuentas habilitadas
Sintaxis
cscript [//nologo] estado-usuarios.vbs [/D:dominio] [/F:fichero] [/R] [/?]
Siendo
| Etiqueta | Dato | ¿Requerido? | Descripción |
| D | dominio | No |
Nombre NetBios del dominio en el que se quiere consultar. En el caso de no pasarse, se consultará en el dominio al que pertenece el equipo desde el que se lanza el script
|
| F | fichero | No |
Ruta y nombre de un archivo de valores separados por tabuladores (ideal para ser abierto con Excel) en el que se volcará la información. Si se omite, se mostrará por pantalla
|
| R | recuento | No |
Si se pasa este modificador, se incluirá un recuento al final, en el que se mostrará el número de usuarios habilitados, deshabilitados y el total de usuarios
|
| ? | No |
Muestra la ayuda en línea.
|
Ejemplos:
- Se muestran por pantalla el estado de los usuarios del dominio desde el que se lanza el script.:
cscript //nologo estado-usuarios.vbs
- Se muestran por pantalla el estado de los usuarios del dominio desde el que se lanza el script. Al final del listado, se mostrará un recuento con el número de usuarios habilitados y deshabilitados y el total de usuarios en el dominio .:
cscript //nologo estado-usuarios.vbs /R
- Se muestran por pantalla el estado de los usuarios del dominio TIA. Al final del listado, se mostrará un recuento con el número de usuarios habilitados y deshabilitados y el total de usuarios en el dominio .:
cscript //nologo estado-usuarios.vbs /D:TIA /R
- Se vuelca al fichero \\bacteriosrv\listadosAD\estado-usuarios.csv, de valores separados por tabuladores, el estado de los usuarios del dominio TIA. Al final del listado, se mostrará un recuento con el número de usuarios habilitados y deshabilitados y el total de usuarios en el dominio .:
cscript //nologo estado-usuarios.vbs /D:TIA /F:\\bacteriosrv\listadosAD\estado-usuarios.csv /R
Este es el código del script
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* estado-usuarios.vbs *
'* *
'* Este script muestra el estado de las cuentas de usuario del *
'* dominio, si están habiliadas o no. La salida del script puede ser *
'* por pantalla o a un fichero de valores separados por tabuladores. *
'* Se puede presentar un resumen, en el cual se muestran el número *
'* total de cuentas, el número de cuentas deshabilitadas y el número *
'* de cuentas habilitadas *
'* *
'* Sintaxis *
'* *
'* cscript [//nologo] estado-usuarios.vbs [/D:dominio] [/F:fichero] *
'* [/R] [/?] *
'* *
'* Siendo *
'* *
'* - /D: dominio (Opcional): *
'* Nombre NetBios del dominio en el que se quiere consultar. *
'* En el caso de no pasarse, se consultará en el dominio al *
'* que pertenece el equipo desde el que se lanza el script *
'* *
'* - /F: fichero (Opcional): *
'* Ruta y nombre de un archivo de valores separados por *
'* tabuladores (ideal para ser abierto con Excel) en el que se *
'* volcará la información. Si se omite, se mostrará por *
'* pantalla *
'* *
'* - /R: recuento (Opcional): *
'* Si se pasa este modificador, se incluirá un recuento al *
'* final, en el que se mostrará el número de usuarios *
'* habilitados, deshabilitados y el total de usuarios *
'* *
'* - /?: ayuda (Opcional): *
'* Muestra la ayuda en línea *
'* *
'* *
'* Ejemplos: *
'* *
'* - Se muestran por pantalla el estado de los usuarios del dominio *
'* desde el que se lanza el script.: *
'* *
'* cscript //nologo estado-usuarios.vbs *
'* *
'* - Se muestran por pantalla el estado de los usuarios del dominio *
'* desde el que se lanza el script. Al final del listado, se mostrará *
'* un recuento con el número de usuarios habilitados y deshabilitados *
'* y el total de usuarios en el dominio .: *
'* *
'* cscript //nologo estado-usuarios.vbs /R *
'* *
'* - Se muestran por pantalla el estado de los usuarios del dominio *
'* TIA. Al final del listado, se mostrará un recuento con el número de *
'* usuarios habilitados y deshabilitados y el total de usuarios en el *
'* dominio .: *
'* *
'* cscript //nologo estado-usuarios.vbs /D:TIA /R *
'* *
'* - Se vuelca al fichero *
'* \\bacteriosrv\listadosAD\estado-usuarios.csv, de valores separados *
'* por tabuladores, el estado de los usuarios del dominio TIA. Al *
'* final del listado, se mostrará un recuento con el número de *
'* usuarios habilitados y deshabilitados y el total de usuarios en el *
'* dominio .: *
'* *
'* cscript //nologo estado-usuarios.vbs /D:TIA *
'* /F:\\bacteriosrv\listadosAD\estado-usuarios.csv /R *
'* *
'* *
'* *
'* *
'* © Fernando Reyes *
'* Enero De 2009 *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'Exigimos la declaración de variables
Option Explicit
'Constante para ver si la cuenta está deshabilitada
'en User Account Control
Const ADS_UF_ACCOUNTDISABLE = 2
Dim str_Error 'As String
Dim int_Error 'As String
Dim str_Dominio 'As String
Dim str_Fichero 'As String
Dim bol_Recuento 'As Boolean
Dim ado_Conexion 'As ADODB.Connection
Dim ado_Comando 'As ADODB.Command
Dim ado_RS 'As ADODB.Recordset
Dim int_UserAccessControl 'As Integer
Dim int_Deshabilitadas 'As Integer
Dim int_Habilitadas 'As Integer
Dim str_Salida 'As String
Dim str_Recuento 'As String
Dim str_Deshabilitadas 'As String
Dim str_Habilitadas 'As String
Dim str_Total 'As String
bol_Recuento = False
'Validando los argumentos y almacenando
'sus valores
If f_RevisarArgumentos( _
str_Error, _
int_Error) Then
Call s_Ayuda(str_Error)
WScript.Quit int_Error
End If
'Creamos un objeto de conexión ADO
Set ado_Conexion = CreateObject("ADODB.Connection")
'Conectamos al proveedor Active Directory
ado_Conexion.Open "Provider=ADsDSOObject;"
'Creamos un objeto de comando ADO
Set ado_Comando = CreateObject("ADODB.Command")
'Establecemos la conexión como conexión activa del objeto
'comando ADO
ado_Comando.ActiveConnection = ado_Conexion
'Establecemos la cadena de búsqueda, buscando usuarios
'y obteniendo su UsserAccountControl, su nombre para mostrar,
'su nombre de inicio de sesión PreWindows2000, su
'UserPrincipalName y el nombre distinguido
ado_Comando.CommandText = _
"<GC://" & str_Dominio & ">;(objectCategory=User)" & _
";userAccountControl,displayName,sAMAccountNa" & _
"me,UserPrincipalName,distinguishedName;subtree"
'Paginamos la consulta para que así muestre todo, no
'se limite a 1000 resultados
ado_Comando.Properties("Page Size") = 100
ado_Comando.Properties("Timeout") = 60
ado_Comando.Properties("Cache Results") = False
'Ejecutamos la consulta
Set ado_RS = ado_Comando.Execute
'Montamos los encabezados
str_Salida = "Nombre" & vbTab & _
"Login" & vbTab & _
"UPN" & vbTab & _
"distinguishedName" & vbTab & _
"Estado"
'Si no se vuelca a fichero
If Len(str_Fichero) = 0 Then
'Mostramos los encabezados
WScript.Echo str_Salida
'Los subrayamos
str_Salida = "======" & vbTab & _
"=====" & vbTab & _
"===" & vbTab & _
"=================" & vbTab & _
"======"
WScript.Echo str_Salida
'Vaciamos la variable de salida
str_Salida = ""
'Si hay que volcar la información a un fichero
Else
'Añadimos un salto de línea a los encabezados
str_Salida = str_Salida & vbCrLf
End If
'Recorremos los usuarios hasta el final
Do Until ado_RS.EOF
'Establecemos control de errores
On Error Resume Next
'Obtenemos los distintos campos
str_Salida = str_Salida & ado_RS.Fields("displayName")
str_Salida = str_Salida & vbTab
str_Salida = str_Salida & ado_RS.Fields("sAMAccountName")
str_Salida = str_Salida & vbTab
str_Salida = str_Salida & ado_RS.Fields("UserPrincipalName")
str_Salida = str_Salida & vbTab
str_Salida = str_Salida & ado_RS.Fields("distinguishedName")
str_Salida = str_Salida & vbTab
'Obtenemos el UserAccountControl
int_UserAccessControl=ado_RS.Fields("userAccountControl")
'Miramos si está deshabilitada
If int_UserAccessControl AND ADS_UF_ACCOUNTDISABLE Then
'Está deshabilitada: lo mostraremos
str_Salida = str_Salida & "Deshabilitada"
'Incremoentamos el contador de cuentas deshabilitadas
int_Deshabilitadas = int_Deshabilitadas + 1
Else
'Está habilitada: lo mostramos
str_Salida = str_Salida & "Habilitada"
'Incrementamos el contador de cuentas habilitadas
int_Habilitadas = int_Habilitadas + 1
End If
'Devolvemos el control de errores a cscript
On Error Goto 0
'Si no se vuelca a fichero
If Len(str_Fichero) = 0 Then
'Mostramos los encabezados
WScript.Echo str_Salida
'Vaciamos la variable de salida
str_Salida = ""
'Si hay que volcar la información a un fichero
Else
'Añadimos un salto de línea a la salida
str_Salida = str_Salida & vbCrLf
End If
'Vamos al siguiente registro
ado_RS.MoveNext
Loop
'Cerramos el Recordset y la conexión
ado_RS.Close
ado_Conexion.Close
'Vaciamos los objetos ADO
Set ado_RS = Nothing
Set ado_Comando = Nothing
Set ado_Conexion = Nothing
'Si hay que mostrar el recuento
If bol_Recuento Then
'Si la salida es por pantalla, la formateamos
If Len(str_Fichero) = 0 Then
'Obtenemos los valores formateados
Call s_FormatearRecuento(int_Deshabilitadas, _
int_Habilitadas, _
str_Deshabilitadas, _
str_Habilitadas, _
str_Total)
'Montamos la salida del recuento
'Primero las cuentas deshabilitadas
str_Recuento = vbCrLf & _
"Cuentas deshabilitadas = " & str_Deshabilitadas
'Ahora las habilitadas
str_Recuento = str_Recuento & vbCrLf & _
"Cuentas habilitadas = " & str_Habilitadas
'Ponemos una línea de iguales para marcar la línea de
'suma, separando habilitadas y deshabilitadas del total
str_Recuento = str_Recuento & vbCrLf & _
String(25 + Len(str_Total),"=")
'Ponemos el total
str_Recuento = str_Recuento & vbCrLf & _
"Total de cuentas = " & str_Total
'Si la salida es a fichero, separamos las etiquetas de los
'números por tabuladores
Else
str_Recuento = vbCrLf & _
"Cuentas deshabilitadas" & vbTab & FormatNumber(int_Deshabilitadas,0,,,True)
str_Recuento = str_Recuento & vbCrLf & _
"Cuentas habilitadas" & vbTab & FormatNumber(int_Habilitadas,0,,,True)
str_Recuento = str_Recuento & vbCrLf & _
"Total de cuentas" & vbTab & _
FormatNumber((int_Deshabilitadas + int_Habilitadas),0,,,True)
End If
'No hay que mostrar el recuento
Else
'Dejamos como cadena vacía el recuento
str_Recuento = ""
End If
'Agregamos el recuento a la salida
str_Salida = str_Salida & str_Recuento
'Si hay que volcar información en el fichero
'de salida de ruta y nombre str_Fichero
If Len(str_Fichero) > 0 Then
Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream
'Creamos un objeto FileSystemObject
Set obj_FS = CreateObject("Scripting.FileSystemObject")
'Creamos el fichero de salida
Set obj_TS = obj_FS.CreateTextFile(str_Fichero)
'Volcamos la información de salida en el fichero
obj_TS.Write str_Salida
'Cerramos el fichero de salida
obj_TS.Close
'Limpieza de popa :-)
Set obj_TS = Nothing
Set obj_FS = Nothing
Else
'Mostramos el recuento por pantalla, da igual si se
'ha solicitado o no, pues si no se solicitó, str_Recuento
'es una cadena vacía
WScript.Echo str_Recuento
End If
Function f_RevisarArgumentos( _
str_Error, _
int_Error _
) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 26/01/2009 11:14:14 *
'* 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
'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
'Revisamos que esté el argumento
'/D (dominio)
If WScript.Arguments.Named.Exists("D") Then
str_Dominio = _
f_NTaDN(WScript.Arguments.Named("D") & "\","")
Else
str_Dominio = f_NombreLDAPDeDominio
End If
'Revisamos que esté el argumento
'/F (fichero)
If WScript.Arguments.Named.Exists("F") Then
str_Fichero = _
WScript.Arguments.Named("F")
End If
'Revisamos que esté el argumento
'/R (recuento)
If WScript.Arguments.Named.Exists("R") Then
bol_Recuento = True
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 : 26/01/2009 11:14:14 *
'* 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 muestra el estado de las cuentas de u" & _
"suario del dominio, si están"
WScript.Echo "habiliadas o no. La salida del script puede ser p" & _
"or pantalla o a un fichero de"
WScript.Echo "valores separados por tabuladores. Se puede prese" & _
"ntar un resumen, en el cual se"
WScript.Echo "muestran el número total de cuentas, el número de" & _
" cuentas deshabilitadas y el"
WScript.Echo "número de cuentas habilitadas"
WScript.Echo ""
WScript.Echo "Sintaxis"
WScript.Echo ""
WScript.Echo "cscript [//nologo] estado-usuarios.vbs [/D:domini" & _
"o] [/F:fichero] [/R] [/?]"
WScript.Echo ""
WScript.Echo "Siendo"
WScript.Echo ""
WScript.Echo "- /D: dominio (Opcional):"
WScript.Echo "Nombre NetBios del dominio en el que se quiere co" & _
"nsultar. En el"
WScript.Echo "caso de no pasarse, se consultará en el dominio a" & _
"l que"
WScript.Echo "pertenece el equipo desde el que se lanza el script"
WScript.Echo ""
WScript.Echo "- /F: fichero (Opcional):"
WScript.Echo "Ruta y nombre de un archivo de valores separados por"
WScript.Echo "tabuladores (ideal para ser abierto con Excel) en" & _
" el que se"
WScript.Echo "volcará la información. Si se omite, se mostrará " & _
"por pantalla"
WScript.Echo ""
WScript.Echo "- /R: recuento (Opcional):"
WScript.Echo "Si se pasa este modificador, se incluirá un recue" & _
"nto al final,"
WScript.Echo "en el que se mostrará el número de usuarios habil" & _
"itados,"
WScript.Echo "deshabilitados y el total de usuarios"
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 muestran por pantalla el estado de los usuar" & _
"ios del dominio desde el que"
WScript.Echo "se lanza el script.:"
WScript.Echo ""
WScript.Echo "cscript //nologo estado-usuarios.vbs"
WScript.Echo ""
WScript.Echo "- Se muestran por pantalla el estado de los usuar" & _
"ios del dominio desde el que"
WScript.Echo "se lanza el script. Al final del listado, se most" & _
"rará un recuento con el número"
WScript.Echo "de usuarios habilitados y deshabilitados y el tot" & _
"al de usuarios en el dominio"
WScript.Echo ".:"
WScript.Echo ""
WScript.Echo "cscript //nologo estado-usuarios.vbs /R"
WScript.Echo ""
WScript.Echo "- Se muestran por pantalla el estado de los usuar" & _
"ios del dominio TIA. Al final"
WScript.Echo "del listado, se mostrará un recuento con el númer" & _
"o de usuarios habilitados y"
WScript.Echo "deshabilitados y el total de usuarios en el domin" & _
"io .:"
WScript.Echo ""
WScript.Echo "cscript //nologo estado-usuarios.vbs /D:TIA /R"
WScript.Echo ""
WScript.Echo "- Se vuelca al fichero \\bacteriosrv\listadosAD\e" & _
"stado-usuarios.csv, de valores"
WScript.Echo "separados por tabuladores, el estado de los usuar" & _
"ios del dominio TIA. Al final"
WScript.Echo "del listado, se mostrará un recuento con el númer" & _
"o de usuarios habilitados y"
WScript.Echo "deshabilitados y el total de usuarios en el domin" & _
"io .:"
WScript.Echo ""
WScript.Echo "cscript //nologo estado-usuarios.vbs /D:TIA"
WScript.Echo "/F:\\bacteriosrv\listadosAD\estado-usuarios.csv /R"
WScript.Echo ""
WScript.Echo ""
WScript.Echo ""
End Sub 's_Ayuda
Function f_NTaDN(str_RutaNT, str_DN)
'***********************************************************************
'* 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)
'Limpieza de kks :-)
Set obj_TraductorDeNombres = Nothing
On Error GoTo 0
End Function 'f_NTaDN
Function f_NombreLDAPDeDominio() 'As String
'***********************************************************************
'* Procedimiento: f_NombreLDAPDeDominio *
'* Tipo : Función *
'* Devolución : Cadena *
'* Fecha y Hora : 26/01/2009 11:29:41 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función devuelve el nombre distinguido del *
'* dominio al que pertenece el equipo desde el que se *
'* lanza el script *
'***********************************************************************
Dim obj_RootDSE 'As rootDSE
'Conectamos con rootDSE
Set obj_RootDSE = GetObject("LDAP://rootDSE")
'Devolvemos el nombre NT del dominio
f_NombreLDAPDeDominio = obj_RootDSE.Get("defaultNamingContext")
'Limpieza de bullarenga :-)
Set obj_RootDSE = Nothing
End Function 'f_NombreLDAPDeDominio
Sub s_FormatearRecuento(int_Deshabilitadas, int_Habilitadas, _
str_Deshabilitadas, str_Habilitadas, str_Total)
'***********************************************************************
'* Procedimiento: s_FormatearRecuento *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 26/01/2009 12:21:08 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este método recibe, como variables de entrada, dos *
'* enteros, representando el número de cuentas *
'* habilitadas y deshabilitadas. Recibe también, como *
'* variables de salida, tres cadenas, una para el *
'* número de cuentas deshabilitadas, otra para el *
'* número de cuentas habilitadas y otra para el total *
'* de cuentas (suma de habilitadas y deshabilitadas). *
'* El método formatea el número de habilitadas, de *
'* deshabilitadas y el total con separadores de miles, *
'* y agrega tantos espacios como sean necesarios a la *
'* izquierda de las deshabilitadas y habilitadas para *
'* igualar con la longitud del total; de esta manera *
'* se obtiene una alineación a la derecha. Por *
'* ejemplo, si en las variables de entrada recibe: *
'* *
'* int_Deshabilitadas = 412 *
'* int_Habilitadas = 9734 *
'* *
'* Las tres cadenas serán (las encerramos entre *
'* comillas para que se vea claramente): *
'* *
'* " 412" *
'* " 9.734" *
'* "10.146" *
'***********************************************************************
Dim int_LenDeshabilitadas 'As Integer
Dim int_LenHabilitadas 'As Integer
Dim int_LenTotal 'As Integer
Dim int_Total 'As Integer
'Obtenemos el total de cuentas
int_Total = int_Deshabilitadas + int_Habilitadas
'Obtenemos la cadena con el total formateado sin decimales (0) y
'poniendo separadores de miles (True)
str_Total = FormatNumber(int_Total, 0,,,True)
'Obtenemos la longitud de la cadena resultante para el total
int_LenTotal = Len(str_Total)
'Obtenemos las cadenas formateadas de las deshabilitadas y las
'habilitadas
str_Deshabilitadas = FormatNumber(int_Deshabilitadas, 0,,,True)
str_Habilitadas = FormatNumber(int_Habilitadas, 0,,,True)
'Obtenemos la longitud de las cadenas resultantes
int_LenDeshabilitadas = Len(str_Deshabilitadas)
int_LenHabilitadas = Len(str_Habilitadas)
'Agregamos a la izquierda los espacios necesarios
str_Deshabilitadas = Space(int_LenTotal - int_LenDeshabilitadas) & _
str_Deshabilitadas
str_Habilitadas = Space(int_LenTotal - int_LenHabilitadas) & _
str_Habilitadas
End Sub 's_FormatearRecuento