Найкращий спосіб знайти комп’ютер, з якого востаннє ввійшов користувач?


23

Я сподіваюся, що десь в Active Directory записаний / збережений "останній вхід із [комп'ютера]", або є журнал, який я можу розібрати?

Мета того, щоб хотіти знати останній ПК, на якому ввійшов, - це віддалена підтримка через мережу - наші користувачі пересуваються досить рідко, але я хотів би знати, що те, що я консультую, було оновлено того ранку (коли вони увійшли в систему , імовірно) як мінімум.

Я також розглядаю сценарії входу, які записують імена користувачів та комп'ютерів у відоме місце, на яке я можу посилатися, але деякі наші користувачі не люблять виходити протягом 15 днів одночасно.

Якщо є елегантне рішення, яке використовує сценарії входу, обов'язково згадайте про це, - але якщо це станеться для просто розблокування станції, це було б ще краще!

Відповіді:


26

У рамках нашого сценарію входу я маю, що ця інформація (та більше) увійшла до прихованої спільної доступу на сервері, з одним файлом журналу на користувача. Сценарії виходу з системи додають час, коли користувач вийшов із цього ж файлу журналу. Простий у налаштуванні, без витрат, а інформація є у простому для читання форматі.


Плюс, додавши до журналу, ви отримуєте історичний запис, який часом може бути дуже зручним.
John Gardeniers

1
Реалізовано це наразі, ймовірно, в майбутньому буде перенесено на vbs з додатковими можливостями :) Поки що, використовуючи ДУЖЕ простий скрипт входу в пакет: echo% date%,% time%,% username%, logon,% name name% >> \\ сервер \ вхід $ \ logons.csv Відкрийте за допомогою Excel, і ви налаштовані!
Гаррет

Чи працює сценарій входу як користувач, і в цьому випадку користувач також може зайти і змінити журнал?
Джеймс Єль

@James, тому я використовую приховану загальну ділянку для зберігання журналів. Звичайно, це залежатиме від того, наскільки кмітливі ваші користувачі, оскільки розташування можна отримати, просто прочитавши сценарій. У мене немає такої проблеми з моїм поточним набором користувачів. :)
Джон Гарденєр

1
Я зробив щось подібне, за винятком сценарію входу, зателефонувавши до веб-сервісу, який оновив базу даних. База даних мала веб-перегляд для перегляду поточного стану. Однак для мобільних користувачів це було проблематично.
Нік

10

Ми робимо це за допомогою сценарію входу, який оновлює опис об’єкта комп'ютера в AD.

Вам потрібно виконати власну делегування контролю, щоб дозволити "Автентифікованим користувачам" писати властивість опису комп'ютерних об'єктів у домені / с.

Після цього все, що вам потрібно, - це сценарій, який генерує будь-яку інформацію, яку ви хочете, і записує властивості в об’єкт комп'ютера. Потім цей скрипт призначається як сценарій для входу через об’єкт групової політики, пов'язаний з доменом.

У поле опису ставимо позначку часу, ім’я користувача, IP-адреси. Часова позначка посідає перше місце, оскільки це дозволяє швидко бачити "старі" комп'ютерні об'єкти, сортуючи в полі опису.

Ось сценарій, який я написав для цього, якщо ви хочете використовувати його як вихідну точку:

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo") 'Bind to AD
Set objNet = CreateObject("WScript.Network")

strCompDN = objSysInfo.ComputerName 'DN for computer, e.g. "CN=VISTAWORKSTATION,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objComp = GetObject("LDAP://" & strCompDN) 'IADsComputer object

strUserDN = objSysInfo.UserName 'DN for user, e.g. "CN=John Smith,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objUser = GetObject("LDAP://" & strUserDN) 'IADsUser object

strUsrLogin = LCase(objNet.UserName)

strNow = Now
strDateStamp = DatePart("yyyy",strNow) & _
    Right("0" & DatePart("m",strNow), 2) & _
    Right("0" & DatePart("d",strNow), 2) & _
    "@" & _
    Right("0" & DatePart("h",strNow), 2) & _
    Right("0" & DatePart("n",strNow), 2)

'RegExp object used to perform a simple match on IP address
Set objRE = New RegExp
objRE.IgnoreCase = True
'Note this regexp pattern isn't "correct" for matching an IPv4 address properly, but since WMI will return an
'array of IP addresses, this is sufficient to distinguish IPv4 vs IPv6
objRE.Pattern = "^\d+\.\d+\.\d+\.\d+$"

strIP = ""

'Connect to WMI and retreive all network adapters
Set objWMI = GetObject("winmgmts:")
Set colNICs = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")

'Get the IP(s) assigned to whichever network adapter has our default gateway
If colNICs.Count > 0 Then
    For Each objNIC in colNICs
        If IsArray(objNIC.DefaultIPGateway) Then
            arrIP = objNIC.IPAddress
            For i = 0 To UBound(arrip)
                If objRE.Test(arrIP(i)) Then strIP = strIP & " " & arrIP(i)
            Next
            strMAC = objNIC.MACAddress
        End If  
    Next
End If

strIP = Trim(strIP)

objComp.Description = strDateStamp & " " & strUsrLogin & " " & strIP
objComp.Put "extensionAttribute1", strUsrLogin
objComp.Put "extensionAttribute2", strIP
objComp.Put "extensionAttribute3", strMAC

objComp.SetInfo

Як делегувати автентифіковані користувачі запису чіткості дозволів на об’єкт поля опису в AD?
NULL.Dude

6

Мені довелося досягти однакового результату з аналогічних причин; якось визначити, з якої машини конкретний користувач увійшов у систему. Мені хотілося знати "до факту", і не вдалося змінити сценарії входу користувачів, як обговорювалося вище.
Я використовував паттерн повноважень на постійному струмі, на який користувач перевіряв автентичність, щоб проаналізувати журнал подій безпеки:

get-eventlog "Security" | where {$_.Message -like "*Username*" -AND "Source Network Address"} | export-csv C:\Temp\test.csv

Відкрийте .csv за допомогою excel або редактора ваших програм fav та шукайте останню запис, що показує і ім’я облікового запису (ім'я користувача), і адресу джерела мережі в межах однієї події.
Це може бути не на 100% надійним рішенням (залежно від часу оренди DHCP тощо), але це працювало для мене.


6

Ви можете ввімкнути аудит подій входу в обліковий запис. Ці події (включаючи розблокування робочої станції) будуть зберігатися в журналі безпеки DC.

Існують також сторонні інструменти, які полегшують це, наприклад, True Last Logon .


4

Я просто записую ім’я користувача (а також іншу інформацію, наприклад дату та час, деякі версії програми тощо) в опис комп'ютера за допомогою сценарію входу. Таким чином я можу швидко та легко перетягувати всю інформацію з користувачів AD & Computer, і в якості бонусу я маю вдалий спосіб визначити, які ПК, які ще є в AD, не використовувались деякий час (і тому, швидше за все, це мертві машини).


3

ThatGraemeGuy , дякую за відмінний сценарій! Мені довелося переписати його в PowerShell, але він все ще працює.

$CompDN = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
$strCompDN = [string]([adsisearcher]$CompDN).FindOne().Properties.distinguishedname
$objComp = [ADSI]("LDAP://"+$strCompDN)

# quit if computer is a server or DC
if (($strCompDN -like '*Controller*') -or ($strCompDN -like '*SERVER*')) { exit }

$strUsrLogin = $env:username
$strDateStamp = Get-Date -f 'yyyy-MM-dd@HH:mm'
$IPPattern = "^\d+\.\d+\.\d+\.\d+$"

$colNICs = gwmi Win32_NetworkAdapterConfiguration
if ($colNICs.Count -gt 0) {
foreach ($objNIC in $colNICs){
        if ($objNIC.DefaultIPGateway) {
            $arrIP = $objNIC.IPAddress
            for ($i=0; $i -lt $colNICs.Count; $i++) { 
            if ($arrIP[$i] -match $IPPattern) { $strIP = $arrIP[$i]; $strMAC = $objNIC.MACAddress }
            }
        }
    }
}

$objComp.Description = $strDateStamp + " - " + $strUsrLogin + " - " + $strIP
$objComp.extensionAttribute1 = $strUsrLogin
$objComp.extensionAttribute2 = $strIP
$objComp.extensionAttribute3 = $strMAC
$objComp.SetInfo()

2

Хитрість знати напевно, де користувачі востаннє ввійшли, окрім пропозицій Адама, - це агрегація журналів. Якщо у вас є кілька контролерів домену, вам або потрібно перевірити їх усі, або централізувати журнал, а потім перевірити єдиний журнал.

Деякі, можливо навіть більшість сторонніх інструментів, досить розумні, щоб запитувати всі контролери домену. Але якщо ви думаєте написати сценарій, щоб розібрати його самостійно, я не можу стверджувати достатньо сильно для централізації ваших журналів.


1

В ідеалі ви б захопили наступне для своєї команди CSIRT для надання допомоги у запрошеннях.

користувальницький вхід з назвою робочої станції MAC-адреса IP-адреса Дата / тип входу часової марки (rdp, інтерфактивний тощо)

Потім скиньте це в команду sql в базу даних, яку вони можуть запитувати. Шматки та шматочки реєструються в усьому світі, але записування цього економить час, перетягуючи дані з DHCP / WINS-серверів тощо ...


1
Я думаю, що це трохи непосильно для "Ей, як звуть комп'ютер Донні?" але, можливо, колись ми будемо на такому рівні: P
Гарретт

0

Єдиний спосіб отримати найсвіжішу інформацію - це підживлення журналів. Використовуйте такий інструмент, як Microsoft Operations Manager або безкоштовний інструмент, як приманка, для агрегації цікавих журналів подій із сервера в центральне місце (звичайні текстові файли або SQL базу даних), а потім використовуйте такі інструменти, як записи logparser або SQL, щоб генерувати потрібний звіт.

щоб знайти різні ідентифікатори подій для різних подій, перейдіть через Енциклопедію журналу подій

Повідомте мене, якщо ви хочете пройти цей маршрут, я можу допомогти вам створити відповідні запити для logparser.


0

Якщо ви шукаєте історичну довідку, ви можете спробувати сторонній інструмент, як Logon Central від Motivation Systems. Він записує всі логотипи користувачів Active Directory та надає веб-інтерфейс для пошуку даних. Вона також включає деякі досить хороші графіки, які переводять статистику входу у відсоток використання.


0

ind Увійти в AD

Багато разів нам потрібно знати, чи певний вхід є частиною групи користувачів оголошення. Або іноді нам потрібно знати групу AD і хотіти знати, хто всі входи в неї.

Існує багато різних способів досягти цього.

Я виконую цей крок, щоб створити ярлик на моєму робочому столі, де я можу легко знайти вхід. Будь ласка, слідкуйте за процесом як

START-> RUN -> dsquery rundll32, OpenQueryWindow

Ви можете знайти всю рекламу, до якої ви входите, скориставшись цим.

Пуск-> Налаштування-> Панель управління -> Інструменти адміністратора -> Користувач Active Directory та комп’ютери Виберіть Домен, у якому потрібно знайти логін, клацніть правою кнопкою миші та виберіть параметр «Знайти».


0

Я збирався додати це як коментар до відповіді marcusjv вище, але у мене немає репутації, тому окрему відповідь доведеться робити:

У цьому виразі -AND "Джерельна мережа Адреса" завжди буде оцінювати ІСТИНУ

Я думаю, що вам потрібно: get-eventlog "Безпека" | де {$ .Message -like "* ім'я користувача *" -AND $ .Message.contains ("Адреса мережі джерела")}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.