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 | Sí |
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
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.
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%
paco escribió
MUCHAS GRACIASSSSSSSSSSSSSSSS Eres el Puto amo. Este script me acaba de ahorrar un curro increible.
Un saludo
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
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.
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
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.
miguel a escribió
una duda como hago para que solo me muestre un usuario en especifico
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.
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.
Christian Castellanos escribió
Buenas Tardes. Muchas Gracias Excelente el script.
MIler Alberto Garcia escribió
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 :)
urpiano escribió
MIler Alberto Garcia,
¿No será que esos usuarios no tienen permisos para poder modificar el fichero de registro?
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
urpiano escribió
Furyto,
Para abrir boca con el tema de GPOs, mira si te ayuda ese artículo mío:
Directivas de grupo
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.
urpiano escribió
Osmeidy Pérez Collado,
Sí, al script debes ponerle extensión VBS.
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.
urpiano escribió
Osmeidy Pérez Collado,
¿Tienen permiso de escritura tanto en la pestaña Seguridad como en la Compartir?
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…
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.