Obtenha uma lista de quem fez login em cada servidor

Obtenha uma lista de quem fez login em cada servidor

Estou procurando uma maneira de consultar o Active Directory ou SMS ou algo assim para obter uma lista de usuários que fizeram login em um servidor Windows para vários servidores. Seria como verificar o arquivo lastlog no Linux. Não preciso de tempo nem de qualquer outra coisa, exceto o nome de usuário.

Algo com uma saída tão simples como: SERVERNAME: shatnerw, nimoyl, kelleyd,

Qualquer contribuição sobre isso seria ótima. Mesmo que seja "use esta função no script VB".

Obrigado, um chapéu preto

Editar: até agora descobri que as informações estão no registro em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Tem o guia que está bem. Agora preciso descobrir uma maneira de consultar isso remotamente.

Responder1

Se você deseja apenas a lista de perfis, o PowerShell é provavelmente sua melhor aposta.

$Server = 'RemoteServer'
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)

Isso instanciará $reg como detentor do objeto de registro remoto em HKLM. Para chegar ao ponto desejado:

$ProfileList = $Reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList')

Isso preencherá $ProfileList com as subchaves dos próprios perfis. Então, para extrair a lista de usuários:

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
}

Ou alguma coisa parecida. Está na minha cabeça.

Responder2

Crie um GPO que se aplique aos servidores que você deseja monitorar e em Configuração do Computador > Políticas > Configurações do Windows > Configurações de Segurança > Políticas Locais > Política de Auditoria, habilite "Eventos de logon de auditoria" em Sucesso e/ou Falha dependendo de seus requisitos.

Não habilite eventos de logon de conta de auditoria se os servidores que você está monitorando forem DCs. Os eventos de logon de conta são gerados em controladores de domínio quando alguém faz logon com sua conta de usuário de domínio, portanto você verá muitos eventos.

Resumindo, um "evento de logon" é criado quando um usuário faz logon em um computador, um "evento de logon de conta" é criado em um controlador de domínio quando um usuário faz logon com sua conta de usuário de domínio, MAS o computador no qual ele faz logon. também gera interativamente um evento de logon da conta. É isso que você deseja monitorar. Juntamente com o EventForwarding (para seus servidores capazes), você pode simplesmente monitorar seu próprio log de eventos ou usar traps SNMP para capturar os eventos evntwin.exee encaminhá-los para um sistema de monitoramento/alertas SNMP.

Nas estações de trabalho dos usuários, eu realmente uso um VBScript que abre um processo oculto do IE para um servidor interno com PHP/MySQL instalado, que simplesmente despeja o nome de usuário no banco de dados e pronto. O 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 você precisa do servidor web, do banco de dados PHP e MySQL para fazer isso, então se for algo em que você esteja interessado, me avise e eu irei desenterrar essas partes também. Você também pode aplicar isso usando um GPO, mas com uma ressalva: ele só pode ser executado na seção Configuração do usuário do seu GPO.

Então, duas opções para você aí. HTH.

Editar: aqui está o script PHP mencionado acima. Fácil mesmo.

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.";

Saúde

informação relacionada