
Estoy buscando una forma de consultar Active Directory o SMS o algo así para poder obtener una lista de usuarios que han iniciado sesión en un servidor Windows para varios servidores. Sería como comprobar el archivo lastlog en Linux. No necesito la hora ni nada más excepto el nombre de usuario.
Algo con una salida tan simple como: SERVERNAME: shatnerw, nimoyl, kelleyd,
Cualquier aportación sobre esto sería genial. Incluso si se trata de "usar esta función en el script VB".
Gracias, un sombrero negro
Editar: Hasta ahora he encontrado que la información está en el registro en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Tiene la guía que está bien. Ahora necesito encontrar una manera de consultar eso de forma remota.
Respuesta1
Si solo desea la lista de perfiles, PowerShell es probablemente su mejor opción.
$Server = 'RemoteServer'
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
Esto creará una instancia de $reg como titular del objeto de registro remoto en HKLM. Para llegar a la parte que desea:
$ProfileList = $Reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList')
Esto completará $ProfileList con las subclaves de los perfiles mismos. Luego para extraer la lista de usuarios:
Write-Host "`n$Server: " -nonewline
ForEach ($SID in $ProfileList.GetValueNames()) {
$ProfileKey = $ProfileList.OpenSubKey($SID)
# Get the ProfileImagePath key
$ProfileKey.GetValue("ProfileImagePath")
# Break the path up into an array, using \ as the delimiter
$PathBits = $ProfileKey.Split("\")
# The last element of the array is our user, find the last element
$LastIndex = $PathBits.Count - 1
# Dump the last element to something useful
$User = $PathBits[$LastIndex]
# Output the user
write-host " $User" -nonewline
}
O algo parecido a eso. Está fuera de mi cabeza.
Respuesta2
Cree un GPO que se aplique a los servidores que desea monitorear y en Configuración del equipo > Políticas > Configuración de Windows > Configuración de seguridad > Políticas locales > Política de auditoría, habilite "Auditar eventos de inicio de sesión" en caso de éxito o error, según sus requisitos.
No habilite Auditar eventos de inicio de sesión de cuenta si los servidores que está monitoreando son controladores de dominio. Los eventos de inicio de sesión de cuenta se generan en los controladores de dominio cuando alguien inicia sesión con su cuenta de usuario de dominio, por lo que verá demasiados eventos.
En resumen, se crea un "evento de inicio de sesión" cuando un usuario inicia sesión en una computadora, se crea un "evento de inicio de sesión de cuenta" en un controlador de dominio cuando un usuario inicia sesión con su cuenta de usuario de dominio PERO con la computadora en la que inicia sesión. También genera interactivamente un evento de inicio de sesión de cuenta. Esto es lo que desea monitorear. Junto con EventForwarding (para sus servidores compatibles), puede simplemente monitorear su propio registro de eventos o usar trampas SNMP para capturar los eventos evntwin.exe
y reenviarlos a un sistema de alerta/monitoreo SNMP.
En las estaciones de trabajo de los usuarios, de hecho uso un VBScript que abre un proceso oculto de IE en un servidor interno con PHP/MySQL instalado que simplemente descarga el nombre de usuario en la base de datos y eso es todo. El VBScript:
Set oIE = CreateObject("InternetExplorer.Application")
Set oNet = CreateObject("WScript.Network")
sComputerName = oNet.ComputerName
sUsername = oNet.UserName
oIE.Navigate "http://intranet/logon/logon.php?un=" & Trim(sUsername) & "&ma=" & Trim(sComputerName)
Do While oIE.Busy = True
WScript.Sleep 500
Loop
oIE.Quit
Set oIE = Nothing
WScript.Quit
Obviamente necesitas el servidor web, PHP y la base de datos MySQL para acompañar esto, así que si es algo que te interesa, házmelo saber y buscaré esas partes también. También puede aplicar esto usando un GPO, pero con una advertencia: solo puede ejecutarse en la sección Configuración de usuario de su GPO.
Entonces, hay dos opciones para ti. HTH.
Editar: aquí está el script PHP mencionado anteriormente. Realmente fácil.
mysql_connect('mysqlserver', 'username', 'password');
mysql_select_db('database');
$un = trim(addslashes($_GET['un']));
$ma = trim(addslashes($_GET['ma']));
mysql_query("INSERT INTO userlist (user_logon_name, machine_name, logon_time) VALUES ('$un', '$ma', now())");
echo "User ". $_GET['un']. " logged on.";
Salud