Erhalten Sie eine Liste der Personen, die sich bei den einzelnen Servern angemeldet haben

Erhalten Sie eine Liste der Personen, die sich bei den einzelnen Servern angemeldet haben

Ich suche nach einer Möglichkeit, Active Directory oder SMS oder etwas Ähnliches abzufragen, damit ich eine Liste der Benutzer erhalten kann, die sich für mehrere Server bei einem Windows-Server angemeldet haben. Das wäre, als würde ich die Lastlog-Datei unter Linux überprüfen. Ich brauche weder die Zeit noch sonst etwas außer dem Benutzernamen.

Etwas mit einer so einfachen Ausgabe wie: SERVERNAME: shatnerw, nimoyl, kelleyd,

Jeder Input dazu ist willkommen. Auch wenn es nur heißt: „Verwenden Sie diese Funktion im VB-Skript.“

Danke, ablackhat

Bearbeiten: Bisher habe ich festgestellt, dass die Informationen in der Registrierung unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList zu finden sind. Sie haben die GUID, was in Ordnung ist. Jetzt muss ich einen Weg finden, diese remote abzufragen.

Antwort1

Wenn Sie nur die Profilliste möchten, ist PowerShell wahrscheinlich die beste Wahl.

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

Dadurch wird $reg als Halter für das Remote-Registrierungsobjekt in HKLM instanziiert. So gelangen Sie an den gewünschten Teil:

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

Dadurch wird $ProfileList mit den Unterschlüsseln für die Profile selbst gefüllt. Anschließend wird die Liste der Benutzer wie folgt extrahiert:

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
}

Oder so ähnlich. Das fällt mir spontan ein.

Antwort2

Erstellen Sie ein GPO, das für die Server gilt, die Sie überwachen möchten, und aktivieren Sie unter „Computerkonfiguration > Richtlinien > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Überwachungsrichtlinie“ je nach Ihren Anforderungen „Anmeldeereignisse überwachen“ bei Erfolg und/oder Fehler.

Aktivieren Sie „Kontoanmeldeereignisse überwachen“ nicht, wenn es sich bei den von Ihnen überwachten Servern um Domänencontroller handelt. Kontoanmeldeereignisse werden auf Domänencontrollern generiert, wenn sich jemand mit seinem Domänenbenutzerkonto anmeldet. Daher werden zu viele Ereignisse angezeigt.

Kurz gesagt, ein „Anmeldeereignis“ wird erstellt, wenn sich ein Benutzer bei einem Computer anmeldet, ein „Kontoanmeldeereignis“ wird auf einem Domänencontroller erstellt, wenn sich ein Benutzer mit seinem Domänenbenutzerkonto anmeldet, ABER der Computer, bei dem er sich anmeldet, generiert ebenfalls interaktiv ein Kontoanmeldeereignis. Darauf möchten Sie achten. In Verbindung mit EventForwarding (für Ihre leistungsfähigen Server) können Sie einfach Ihr eigenes Ereignisprotokoll überwachen oder SNMP-Traps verwenden, um die Ereignisse abzufangen evntwin.exeund an ein SNMP-Überwachungs-/Warnsystem weiterzuleiten.

Auf Benutzerarbeitsplätzen verwende ich tatsächlich ein VBScript, das einen versteckten IE-Prozess zu einem internen Server mit installiertem PHP/MySQL öffnet, der einfach den Benutzernamen in die Datenbank schreibt und das war’s. Das 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

Natürlich benötigen Sie dazu den Webserver, PHP und die MySQL-Datenbank. Wenn Sie daran interessiert sind, lassen Sie es mich wissen und ich werde auch diese Teile heraussuchen. Sie können dies auch mithilfe einer Gruppenrichtlinie anwenden, allerdings mit einer Einschränkung: Es kann nur im Abschnitt „Benutzerkonfiguration“ Ihrer Gruppenrichtlinie ausgeführt werden.

Es gibt also zwei Optionen für Sie. HTH.

Bearbeiten: Hier ist das oben erwähnte PHP-Skript. Wirklich einfach.

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

Prost

verwandte Informationen