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 Registrar Los Inicios Y Cierres De Sesión De Los Usuarios

Publicado por urpiano en Viernes 25 de Abril de 2008

Este script está ideado para registrar los inicios y cierres de sesión de los usuarios. A pesar de que se puede obtener los inicios de sesión por medio de una GPO, utilizando la auditoría de inicio de sesión de cuenta, esto no permite registrar el cierre de sesión y además es bastante incómodo el mirar estos datos en el visor de sucesos, si bien se pueden filtrar y exportar a un fichero CSV para después trabajar en Excel con ellos. Por ello, este script es interesante para obtener los datos ya filtrados y reunidos en un fichero.

Los resultados se almacenan en un fichero de valores separados por tabuladores, ideal para abrirse on Excel. Se puede especificar el nombre del fichero utilizando variables de entorno, lo que permite que se pueda crear un fichero por cada usuario, por ejemplo, para así no tener todos los inicios y cierres de sesión de todos los usuarios en un mismo fichero (cosa que también se puede si así se desea)

Para usarse desde una GPO, deberemos hacerlo en una GPO que afecte a las cuentas de usuario de las que queremos registrar sus inicios y cierres de sesión. Editando la GPO, en el panel del árbol, nos situamos en el nodo Configuración de usuarioConfiguración de WindowsSecuencia de comandos(inicio de sesión/cierre de sesión); veremos en el panel de detalle las directivas Iniciar sesión y Cerrar sesión. Hacemos doble click en Iniciar sesión, pulsamos el botón Agregar…, en la caja de texto Nombre del archivo de comandos ponemos la ruta y nombre del script VBScript (la ruta deberá ser una ruta UNC, es decir una ruta de red, del tipo \servidorcarpetaregistrar-sesion.vbs) y en la caja de texto Parámetros del archivo de comandos debemos poner el modificador /I más la ruta y nombre del archivo en el que se quieren guardar los inicios y cierres de sesión, encerrado entre comillas si contiene espacios (por ejemplo /I "\servidorcarpeta$Registro de sesiones%username%.tsv"); pulsamos Aceptar y nuevamente Aceptar. Hacemos doble click en la directiva Cerrar sesión y repetimos los mismos pasos anteriores, poniendo todo igual, salvo en los parámetros del archivo de comandos, que suprimiremos el modificador /I(según el ejemplo anterior, quedaría así: "\servidorcarpeta$Registro de sesiones%username%.tsv"). Para tener los registros centralizados, es conveniente que se guarden en una carpeta de red y, por tanto, es necesario que los usuarios tengan acceso de escritura en ella, por lo que convienen que sea compartida de manera oculta (que su nombre de recurso compartido termine con el carácter dolar "$").

Sintaxis

{wscript | cscript [//nologo]} registrar-sesion.vbs [/I] [/?] fichero

Siendo

Etiqueta Dato ¿Requerido? Descripción
  fichero
Nombre del fichero de valores separados por tabulador en el que se guarda la información. Se pueden incluir variables de entorno en el nombre, que serán sustituidas por su valor.
I inicio No
Indica si se trata de un inicio de sesión o no.
?   No
Muestra la ayuda en línea.

Ejemplos:

- Registra el inicio de sesión en el fichero “\sauronmordorusuariossesiones%USERNAME%.tsv”:

cscript //nologo registrar-sesion.vbs /I "\sauronmordorusuariossesiones%USERNAME%.tsv"

- Registra el cierre de sesión en el fichero “\sauronmordorusuariossesiones%USERNAME%.tsv”:

cscript //nologo registrar-sesion.vbs "\sauronmordorusuariossesiones%USERNAME%.tsv"

Este es el código del script

'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* registrar-sesion.vbs                                                *
'*                                                                     *
'* Este script está ideado para registrar los inicios y cierres de     *
'* sesión de los usuarios. A pesar de que se puede obtener los inicios *
'* de sesión por medio de una GPO, utilizando la auditoría de inicio   *
'* de sesión de cuenta, esto no permite registrar el cierre de sesión  *
'* y además es bastante incómodo el mirar estos datos en el visor de   *
'* sucesos, si bien se pueden filtrar y exportar a un fichero CSV para *
'* después trabajar en Excel con ellos. Por ello, este script es       *
'* interesante para obtener los datos ya filtrados y reunidos en un    *
'* fichero.                                                            *
'*                                                                     *
'* Los resultados se almacenan en un fichero de valores separados por  *
'* tabuladores, ideal para abrirse con Excel. Se puede especificar el  *
'* nombre del fichero utilizando variables de entorno, lo que permite  *
'* que se pueda crear un fichero por cada usuario, por ejemplo, para   *
'* así no tener todos los inicios y cierres de sesión de todos los     *
'* usuarios en un mismo fichero (cosa que también se puede si así se   *
'* desea)                                                              *
'*                                                                     *
'* Sintaxis                                                            *
'*                                                                     *
'* {wscript | cscript [//nologo]} registrar-sesion.vbs [/I] [/?]       *
'* fichero                                                             *
'*                                                                     *
'* Siendo                                                              *
'*                                                                     *
'* - fichero (Requerido):                                              *
'*         Nombre del fichero de valores separados por tabulador en el *
'*         que se guarda la información. Se pueden incluir variables   *
'*         de entorno en el nombre, que serán sustituidas por su valor.*
'*                                                                     *
'* - /I: inicio (Opcional):                                            *
'*         Indica si se trata de un inicio de sesión o no.             *
'*                                                                     *
'*                                                                     *
'* Ejemplos:                                                           *
'*                                                                     *
'* - Registra el inicio de sesión en el fichero                        *
'* "\sauronmordorusuariossesiones%USERNAME%.tsv":                 *
'*                                                                     *
'* cscript //nologo registrar-sesion.vbs /I                            *
'* "\sauronmordorusuariossesiones%USERNAME%.tsv"                  *
'*                                                                     *
'* - Registra el cierre de sesión en el fichero                        *
'* "\sauronmordorusuariossesiones%USERNAME%.tsv":                 *
'*                                                                     *
'* cscript //nologo registrar-sesion.vbs                               *
'* "\sauronmordorusuariossesiones%USERNAME%.tsv"                  *
'*                                                                     *
'*                                                                     *
'*                                                                     *
'*                                                                     *
'* © Fernando Reyes                                                    *
'* Abril De 2008                                                         *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

'Exigimos la declaración de variables
Option Explicit

'Constantes para el método OpenTextFile del objeto FileSystemObject
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Dim arr_Campos         'As String
Dim arr_Lineas         'As String
Dim bol_Encontrado     'As Boolean
Dim bol_InicioDeSesion 'As Boolean
Dim int_Error          'As String
Dim int_Linea          'As Integer
Dim obj_FS             'As Scripting.FileSystemObject
Dim obj_NW             'As IWshRuntimeLibrary.WshNetwork
Dim obj_SH             'As IWshRuntimeLibrary.WshShell
Dim obj_TS             'As Scripting.TextStream
Dim str_Equipo         'As String
Dim str_Error          'As String
Dim str_Fichero        'As String
Dim str_Linea          'As String
Dim str_Servidor       'As String
Dim str_Texto          'As String
Dim str_TSV            'As String
Dim str_Usuario        'As String

bol_InicioDeSesion = 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

Set obj_SH = CreateObject("WScript.Shell")
Set obj_NW = CreateObject("Wscript.Network")
Set obj_FS = CreateObject("Scripting.FileSystemObject")

'Obtenemos el nombre de usuario, del equipo en el que está
'y del servidor en el que se loga (en este último caso le
'quitamos el doble back-slash que lleva delante)
str_Usuario = obj_NW.UserName
str_Equipo = obj_NW.ComputerName
str_Servidor = Replace(obj_SH.ExpandEnvironmentStrings( _
                                "%LOGONSERVER%"), _
                       "\", _
                       "")

'Obtenemos el nombre del fichero en el que guardar los registros
str_Fichero = obj_SH.ExpandEnvironmentStrings(str_TSV)

'Si el fichero no existe, lo crearemos (tercer argumento del
'método OpenTextFile del objeto FileSystemObject con valor True) y
'le pondremos una primera línea con los encabezados
If Not obj_FS.FileExists(str_Fichero) Then _
    str_Linea = "Usuario" & vbTab & _
                "Equipo" & vbTab & _
                "Servidor" & vbTab & _
                "Fecha Inicio" & vbTab & _
                "Hora Inicio" & vbTab & _
                "Fecha Cierre" & vbTab & _
                "Hora Cierre"

'Limpieza de culete :-). Sólo dejaremos el objeto FileSystemObject,
'pues lo necesitamos para abrir/crear el fichero de registro
Set obj_NW = Nothing
Set obj_SH = Nothing

'Si se trata de un inicio de sesión...
If bol_InicioDeSesion Then

    'abrimos el fichero para agregar
    Set obj_TS = obj_FS.OpenTextFile(str_Fichero, _
                   ForAppending, _
                   True, _
                   0)

    'agregamos los datos del inicio de sesión a la variable
    str_Linea = str_Linea & vbCrLf & _
                str_Usuario & vbTab & _
                str_Equipo & vbTab & _
                str_Servidor & vbTab & _
                FormatDateTime(Date,vbShortDate) & vbTab & _
                FormatDateTime(Time,vbShortTime)

    'Escribimos la información en el fichero
    obj_TS.Write str_Linea

    'Cerramos el fichero y vaciamos su variable
    obj_TS.close
    Set obj_TS = Nothing               

'Se trata de un cierre de sesión.
Else

    'Si es un fichero nuevo (en caso contrario str_Linea está
    'vacío)...
    If Len(str_Linea) > 0 Then

        'Creamos el archivo de registro
        Set obj_TS = obj_FS.CreateTextFile(str_Fichero, _
                        True, _
                        False)

        'Agregamos los datos del cierre de sesión a la variable
        str_Linea = str_Linea & vbCrLf & _
                    str_Usuario & vbTab & _
                    str_Equipo & vbTab & _
                    str_Servidor & vbTab & _
                    vbTab & _
                    vbTab & _
                    FormatDateTime(Date,vbShortDate) & vbTab & _
                    FormatDateTime(Time,vbShortTime)

        'Escribimos la información en el fichero
        obj_TS.Write str_Linea

        'Cerramos el fichero y vaciamos su variable
        obj_TS.close
        Set obj_TS = Nothing               

    'el fichero ya existe, lo abrimos para lectura, pues debemos
    'localizar la línea en la que escribir los datos del cierre de sesión.
    'Los criterios a seguir son:
    '
    '        1.- Se busca la última línea en la que haya un inicio
    '            de sesión del usuario en el equipo y que no tenga
    '            hora de cierre de sesión y se escribe en el la hora
    '            y fecha del cierre de sesión.
    '        2.- Si todos los registros que coinciden en usuario y
    '            equipo ya tienen registrado un cierre de sesión,
    '            se creará un registro nuevo en el que no se refleje
    '            la hora de inicio de sesión (en caso de haberse
    '            producido un error al registrar el inicio de sesión)

    Else

        'Abrimos el fichero de registro para lectura
        Set obj_TS = obj_FS.OpenTextFile(str_Fichero, _
                       ForReading, _
                       True, _
                       0)

        'Obtenemos el contenido del archivo
        str_Texto = obj_TS.ReadAll

        'Creamos un array con cada línea del archivo
        arr_Lineas = Split(str_Texto,vbCrLf)

        'Marcamos a False el indicador de registro encontrado
        bol_Encontrado = False

        'Recorremos el array de líneas de la última a la primera
        For int_Linea = UBound(arr_Lineas) To LBound(arr_Lineas) Step -1

            'Creamos un array con los datos de la línea
            arr_Campos = Split(arr_Lineas(int_Linea),vbTab)

            On Error Resume Next
            'Si el nombre del equipo y usuario es igual, y no hay
            'no hay información de cierre de sesión, asumimos que
            'se trata de la sesión que se está cerrando
            If LCase(obj_NW.UserName) = LCase(arr_Campos(0)) _
            And LCase(obj_NW.ComputerName) = LCase(arr_Campos(1)) _
            And UBound(arr_Campos)= 4 Then

                On Error Goto 0

                'Agregamos la fecha y la hora
                arr_Lineas(int_Linea) = _
                        arr_Lineas(int_Linea) & vbTab & _
                        FormatDateTime(Date,vbShortDate) & vbTab & _
                        FormatDateTime(Time,vbShortTime)

                'Marcamos el indicador de registro encontrado
                bol_Encontrado = True

                'Salimos del bucle
                Exit For

            End If
            On Error Goto 0

            'Borramos el array de camoos
            Erase arr_Campos

        Next 'int_Linea

        'Si no hemos encontrado un registro con el inicio de sesión...
        If Not bol_Encontrado Then

            'Agregamos un elemento al array de líneas
            ReDim Preserve arr_Lineas(UBound(arr_Lineas) + 1)

            'Ponemos la información del cierre de sesión en él elemento
            'creado
            arr_Lineas(UBound(arr_Lineas)) = _
                    str_Usuario & vbTab & _
                    str_Equipo & vbTab & _
                    str_Servidor & vbTab & _
                    vbTab & _
                    vbTab & _
                    FormatDateTime(Date,vbShortDate) & vbTab & _
                    FormatDateTime(Time,vbShortTime)

        End If

        'Vamos ahora a escribir la información

        'Abrimos el fichero de registro para escritura
        Set obj_TS = obj_FS.OpenTextFile(str_Fichero, _
                       ForWriting, _
                       True, _
                       0)

        str_Texto = ""

        'Recorremos los elementos del array del primero al último
        For int_Linea = LBound(arr_Lineas) To UBound(arr_Lineas)

            'Escribimos la línea
            str_Texto = str_Texto & arr_Lineas(int_Linea) & vbCrLf

        Next 'int_Linea

        str_Texto=Left(str_Texto,Len(str_Texto) - 2)

        obj_TS.Write str_Texto

        'Cerramos el fichero y vaciamos su variable
        obj_TS.Close
        Set obj_TS = Nothing

    End If

End If

'Limpieza de mocos :-)
Set obj_FS = Nothing

Function f_RevisarArgumentos( _
                             str_Error, _
                             int_Error _
                             ) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos                                  *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 24/10/2007 13:09:23                                  *
'* 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 si están todos los argumentos
    'sin nombre requeridos
    If WScript.Arguments.Unnamed.Count < 1 Then

        str_Error = "Error 1, falta/n argumento/s sin " & _
                    "nombre requerido/s"
        bol_Error1 = True

    Else

    'Guardamos los argumentos en las variables
    'correspondientes
        If _
          WScript.Arguments.Unnamed.Count - 1 _
          >= 0 Then _
               str_TSV = _
                       WScript.Arguments.Unnamed(0)

    End If

    'Revisamos que esté el argumento
    '/I (inicio)
    If WScript.Arguments.Named.Exists("I") Then

        bol_InicioDeSesion = 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 : 25/10/2007 13:29:55                                  *
'* 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 está ideado para registrar los inicio" & _
                 "s y cierres de sesión de los"
    WScript.Echo "usuarios. A pesar de que se puede obtener los ini" & _
                 "cios de sesión por medio de"
    WScript.Echo "una GPO, utilizando la auditoría de inicio de ses" & _
                 "ión de cuenta, esto no permite"
    WScript.Echo "registrar el cierre de sesión y además es bastant" & _
                 "e incómodo el mirar estos"
    WScript.Echo "datos en el visor de sucesos, si bien se pueden f" & _
                 "iltrar y exportar a un fichero"
    WScript.Echo "CSV para después trabajar en Excel con ellos. Por" & _
                 " ello, este script es"
    WScript.Echo "interesante para obtener los datos ya filtrados y" & _
                 " reunidos en un fichero."
    WScript.Echo ""
    WScript.Echo "Los resultados se almacenan en un fichero de valo" & _
                 "res separados por tabuladores,"
    WScript.Echo "ideal para abrirse con Excel. Se puede especifica" & _
                 "r el nombre del fichero"
    WScript.Echo "utilizando variables de entorno, lo que permite q" & _
                 "ue se pueda crear un fichero"
    WScript.Echo "por cada usuario, por ejemplo, para así no tener " & _
                 "todos los inicios y cierres de"
    WScript.Echo "sesión de todos los usuarios en un mismo fichero " & _
                 "(cosa que también se puede si"
    WScript.Echo "así se desea)"
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "{wscript | cscript [//nologo]} registrar-sesion.v" & _
                 "bs [/I] [/?] fichero"
    WScript.Echo ""
    WScript.Echo "Siendo"
    WScript.Echo ""
    WScript.Echo "- fichero (Requerido):"
    WScript.Echo "Nombre del fichero de valores separados por tabul" & _
                 "ador en el que"
    WScript.Echo "se guarda la información. Se pueden incluir varia" & _
                 "bles de"
    WScript.Echo "entorno en el nombre, que serán sustituidas por s" & _
                 "u valor."
    WScript.Echo ""
    WScript.Echo "- /I: inicio (Opcional):"
    WScript.Echo "Indica si se trata de un inicio de sesión o no."
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo "Ejemplos:"
    WScript.Echo ""
    WScript.Echo "- Registra el inicio de sesión en el fichero"
    WScript.Echo """\sauronmordorusuariossesiones%USERNAME%.tsv"":"
    WScript.Echo ""
    WScript.Echo "cscript //nologo registrar-sesion.vbs /I"
    WScript.Echo """\sauronmordorusuariossesiones%USERNAME%.tsv"""
    WScript.Echo ""
    WScript.Echo "- Registra el cierre de sesión en el fichero"
    WScript.Echo """\sauronmordorusuariossesiones%USERNAME%.tsv"":"
    WScript.Echo ""
    WScript.Echo "cscript //nologo registrar-sesion.vbs"
    WScript.Echo """\sauronmordorusuariossesiones%USERNAME%.tsv"""
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo ""

End Sub 's_Ayuda

 

 

21 comentarios para “Script VBScript Para Registrar Los Inicios Y Cierres De Sesión De Los Usuarios”

  1. paco escribió

    Hola compañero del metal. Me parece super interesante este script pero tengo un problema que seguro que es una chorrada y me puedes ayudar.
    El resultado seria esto.
    Usuario Equipo Servidor Fecha Inicio Hora Inicio Fecha Cierre Hora Cierre
    SYSTEM SER2K3 %LOGONSERVER% 11/21/2007 13:04
    SYSTEM SER2K3 %LOGONSERVER% 11/21/2007 13:05 11/21/2007 13:09
    SYSTEM SER2K3 %LOGONSERVER% 11/21/2007 13:10 11/21/2007 13:17
    SYSTEM SER2K3 %LOGONSERVER% 11/21/2007 13:18

    y lo raro es que de usuario me deja SYSTEM en vez del usuario en concreto y el %LOGONSERVER% en vez del servidor en el que hace logon.

    Bueno un saludo y muchas gracias de antemano.

  2. urpiano escribió

    Paco,

    ¿No estarás asignando este script a una política de script de inicio de equipo (rama de equipo)? Debe ser asignado a una política de inicio de sesión (rama de usuario). Si se aplica como script de inicio de equipo, el usuario que lanza el script es SYSTEM y la variable de entorno LOGONSERVER no existe, pues es una variable de usuario, no de equipo, de ahí el que registre usuario SYSTEM y sevidor %LOGONSERVER%

  3. paco escribió

    MUCHAS GRACIASSSSSSSSSSSSSSSS Eres el Puto amo. Este script me acaba de ahorrar un curro increible.

    Un saludo

  4. Marc escribió

    Acabo de probar tu script, em va eprfecto en el inicio de sesión, pero no me audita el apagado del equipo, sabes alguna manera? Si lo pongo en la rama equipo, me sale lo de Paco.
    Gracias y un saludo amigo

  5. urpiano escribió

    Marc,

    ¿Cómo haces para ponerlo para el cierre de sesión? A mí me funciona perfectamente editando la política, poniendo en la caja de texto de arriba la ruta + nombre del script (la ruta debe ser UNC) y en la caja de abajo la ruta + nombre del fichero TSV donde se guardan los registros (ruta que también debe ser CSV?

    Respecto a lo de ponerlo en la rama de equipo, la explicación de lo que pasa ya se la di a Paco, revísala.

  6. jordi escribió

    El problema que yo encuentro es lo saltos de linea, no los hace. Pone todos los datos de Fechas del mismo usuario en la misma linea. No hace una linea nueva para cada conexion del mismo usuario

  7. Javi escribió

    Esta Genial. El único pero que le pongo es que no agrupe los inicios de sesion por máquina. De esta manera facilitaria la busqueda si es en un equipo en concreto el que quieres auditar los inicios.

    Muchas gracias un MUY BUEN TRABAJO.

  8. miguel a escribió

    una duda como hago para que solo me muestre un usuario en especifico

  9. urpiano escribió

    Javi y Miguel A,

    El fichero generado es de valores separados por tabulador; si lo abrís con Excel, vereis que éste pone automáticamente los campos en columnas, con lo que podeis filtrar por usuario y/o por equipo, ordenar por fechas, horas, etc.

  10. urpiano escribió

    Jordi,

    No sé a qué te refieres, pues a mí sí me pone saltos de línea, en cada línea registra el nombre de usuario, el equipo, la fecha y hora de inicio de sesión y la fecha y hora de cierre de sesión.

  11. Christian Castellanos escribió

    Buenas Tardes. Muchas Gracias Excelente el script.

  12. hola amigo excelente script, me sirve de mucho, pero tengo 1 inconveniente, en mi empresa tengo 300 usuarios bajo un Controlador de dominio, el scrip funciona a la perfeccion en 200 usuarios o mas, pero en algunos usuarios al iniciar sesion aparece el siguiente mensaje de alerta:

    Secuencia de Comandos: \\servidor\carpeta\registrar-sesion.vbs
    Linea: 139
    Caracter: 5
    Error: permiso denegado
    Codigo: 800A0046
    Origen: Error de Microsoft VBScript en tiempo de ejecucion

    y aparece un Boton de Aceptar para cerrar el mensaje

    Nota: el script esta tal como tu lo pusiste, sin agregar ni eliminar ninguna linea

    Espero puedas apoyarme, gracias :)

  13. Furyto escribió

    Hola:

    Que es una GPO? Por más que he intentado no entiendo a que te refieres? Tengo un Server 2003 como controlador de dominio y no sé por donde empezar para activar ese script. Agradecería una información más detallada que me ayude.

    Saludos

  14. Osmeidy Pérez Collado escribió

    Hola a todos, mi pregunta va dirigida al autor del post Urpiano o alguien que me pueda responder.
    Soy nuevo en esto de la administracion de redes, tengo un server 2008 y he intentado colocar este script pero no me genera nada, segui los pasos tal y como lo explica aca.
    Ahora tengo una duda, yo copye el codigo del script dentro de un .txt y despues le cambie la extencion a .vbs, esto funciona asi o tengo que compilarlo en VB.
    saludos y espero qeu mi duda no sea tonta para usuarios de este nivel.
    gracias.

  15. Osmeidy Pérez Collado escribió

    Hola amigo, ya di con el problema de la extencion,,, ahora tengo el mismo problema de MIler Alberto Garcia, pues me sale el mensaje.

    Secuencia de Comandos: \\servidor\carpeta\registrar-sesion.vbs
    Linea: 139
    Caracter: 5
    Error: permiso denegado
    Codigo: 800A0046
    Origen: Error de Microsoft VBScript en tiempo de ejecucion

    Aclaro que a la carpeta que comparti le agregue el usuario “Usuarios del Dominio” y le di todos los permisos, incluso el mismo usuario con el que el script me da el error al inicio y al final de la sesion, pues tiene permiso desde la red hacer cualquier cosa en esa carpeta.
    espero resolver este problemita.
    saludos.

  16. Pablo escribió

    Hola
    Solo es una duda, creo que no tiene nada que ver aqui pero se puede conectar una Unidad de Red que no este ni en el Dominio ni en el grupo? esque me da error de usuaio i contraseña, hay algun modo de indicarlo en el script? como? yo tengo esto:

    WSHNetwork.MapNetworkDrive “L:”, “\\servidor2\Software”

    pero al iniciar la session me da error en esta linea i me dice Usuario o contraseña invalidos y es xq el servidor2 no esta en el dominio pero tmpoco quiero meterlo, Si algien me puede ayudar lo agradeceria…

  17. Alexis escribió

    Sabes, a mi me pasa lo mismo que el usuario:

    “Osmeidy Pérez Collado”

    Cierre de sesión:
    Secuencia de Comandos: \\servidor\carpeta\registrar-sesion.vbs
    Linea: 167
    Caracter: 9
    Error: permiso denegado
    Codigo: 800A0046
    Origen: Error de Microsoft VBScript en tiempo de ejecucion

    Inicio de sesión:
    Secuencia de Comandos: \\servidor\carpeta\registrar-sesion.vbs
    Linea: 139
    Caracter: 5
    Error: permiso denegado
    Codigo: 800A0046
    Origen: Error de Microsoft VBScript en tiempo de ejecucion
    Tengo todos los permisos concedidos, lo intenté con una carpeta oculta y con otra no.

    Lo publique en el Active Directory y nada.

    Siempre, o me da un error de inicio de sesion o de cierre de sesion, y en la carpeta no se crea nada.

    Eso sí, yo tengo direccionados los archivos a la misma ubicacion en donde tengo el archivo .vbs. Eso influye??..

    Mis saludos y espero su respuesta.

Escribe un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>