Я ищу способ запросить 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.";
Ура