Назад | Перейти на главную страницу

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

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

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

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

Спасибо ablackhat

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

Если вам нужен просто список профилей, лучше всего подойдет 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
}

Или что-то близкое к этому. Это не в моей голове.

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

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

Короче говоря, «событие входа в систему» ​​создается, когда пользователь входит в систему на компьютере, «событие входа в систему» ​​создается на контроллере домена, когда пользователь входит в систему со своей учетной записью пользователя домена, НО компьютер, на который он входит в систему. в интерактивном режиме также генерирует событие входа в систему. Это то, за чем вы хотите следить. В сочетании с переадресацией событий (для ваших серверов) вы можете просто отслеживать свой собственный журнал событий или использовать ловушки 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, поэтому, если вам это интересно, дайте мне знать, и я тоже открою эти биты. Вы также можете применить это с помощью объекта групповой политики, но с одной оговоркой, он может работать только в разделе конфигурации пользователя вашего объекта групповой политики.

Итак, два варианта для вас есть. 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.";

Ура