El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script VBScript Para Listar El Estado De Los Usuarios Del Dominio

Posted by urpiano en Lunes 26 \26\UTC enero \26\UTC 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

 

 

4 comentarios to “Script VBScript Para Listar El Estado De Los Usuarios Del Dominio”

  1. pezpijo said

    porque tan largo nooooooooooooooo.

  2. urpiano said

    Pezpijo,

    ¿?

  3. MAA said

    Gracias!!! me ha funcionado perfectamente.
    Está muy bien explicado y muy currado.
    La única modicicación que he hecho ha sido poner directamente el dominio (con OU incluida)

  4. jhon said

    esta bueno, me sirvio, pero hay forma que me lo envie a un csv para poder leerlo con con excel y filtrar??
    gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: