Получить список тех, кто вошел на каждый сервер

Получить список тех, кто вошел на каждый сервер

Я ищу способ сделать запрос к Active Directory или SMS или чему-то еще, чтобы получить список пользователей, которые вошли на сервер Windows для нескольких серверов. Это было бы похоже на проверку файла lastlog на Linux. Мне не нужно время или что-то еще, кроме имени пользователя.

Что-то с таким простым выводом, как: SERVERNAME: shatnerw, nimoyl, kelleyd,

Любой вклад по этому поводу будет замечательным. Даже если это будет "использовать эту функцию в скрипте VB".

Спасибо, ablackhat

Редактировать: Пока что я обнаружил, что информация находится в реестре в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. У него есть guid, что нормально. Теперь мне нужно найти способ сделать удаленный запрос.

решение1

Если вам нужен только список профилей, PowerShell, вероятно, станет для вас лучшим выбором.

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

Это создаст экземпляр $reg как держателя для удаленного объекта реестра в HKLM. Чтобы добраться до нужной вам части:

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

Это заполнит $ProfileList подключами для самих профилей. Затем, чтобы извлечь список пользователей:

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
}

Или что-то близкое к этому. Это как-то спонтанно пришло мне в голову.

решение2

Создайте объект групповой политики, который применяется к серверам, которые вы хотите отслеживать, и в разделе «Конфигурация компьютера» > «Политики» > «Параметры Windows» > «Параметры безопасности» > «Локальные политики» > «Политика аудита» включите «Аудит событий входа в систему» ​​при успешном и/или неудачном завершении в зависимости от ваших требований.

Не включайте Audit account login events, если серверы, которые вы отслеживаете, являются DC. События входа в учетную запись генерируются на контроллерах домена, когда кто-то входит в систему с учетной записью пользователя домена, поэтому вы увидите слишком много событий.

Короче говоря, "Событие входа" создается, когда пользователь входит в систему на компьютере, "Событие входа в учетную запись" создается на контроллере домена, когда пользователь входит в систему с учетной записью пользователя домена, НО компьютер, на который он входит, также интерактивно генерирует событие входа в учетную запись. Это то, за чем вы хотите следить. В сочетании с EventForwarding (для ваших совместимых серверов) вы можете просто отслеживать свой собственный журнал событий или использовать SNMP-ловушки для перехвата событий evntwin.exeи пересылки их в систему мониторинга/оповещения SNMP.

На рабочих станциях пользователей я на самом деле использую VBScript, который открывает скрытый процесс IE на внутреннем сервере с установленным PHP/MySQL, который просто сбрасывает имя пользователя в базу данных и все. 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

Очевидно, вам нужны веб-сервер, PHP и база данных MySQL, чтобы работать с этим, так что если это то, что вас интересует, дайте мне знать, и я раскопаю эти части тоже. Вы можете применить это, используя GPO, но с одной оговоркой: это может работать только в разделе конфигурации пользователя вашего GPO.

Итак, у вас есть два варианта. HTH.

Редактировать: Вот PHP-скрипт, упомянутый выше. Действительно, легко.

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

Ваше здоровье

Связанный контент