Cara terbaik untuk menemukan komputer tempat pengguna terakhir masuk?


23

Saya berharap bahwa di suatu tempat di Active Directory "logon terakhir dari [komputer]" ditulis / disimpan, atau ada log yang dapat saya parsing?

Tujuan ingin mengetahui PC terakhir yang masuk adalah untuk menawarkan dukungan jarak jauh melalui jaringan - pengguna kami jarang bepergian, tetapi saya ingin tahu bahwa apa pun yang saya konsultasi sedang memperbarui pagi itu (ketika mereka masuk , mungkin) minimal.

Saya juga mempertimbangkan skrip login yang menulis nama pengguna dan komputer ke lokasi yang dikenal yang dapat saya rujuk, tetapi beberapa pengguna kami tidak suka logout selama 15 hari sekaligus.

Jika ada solusi elegan yang menggunakan skrip login, sebutkan saja - tetapi jika itu terjadi hanya untuk membuka kunci stasiun, itu akan lebih baik!

Jawaban:


26

Sebagai bagian dari skrip logon kami, saya memiliki informasi itu (dan lebih banyak lagi) masuk ke bagian tersembunyi di server, dengan satu file log per pengguna. Skrip logoff menambahkan waktu pengguna logout ke file log yang sama. Mudah diatur, tanpa biaya dan informasinya ada dalam format yang mudah dibaca.


Plus, dengan menambahkan ke log, Anda mendapatkan catatan sejarah, yang kadang sangat berguna.
John Gardeniers

1
Diimplementasikan ini untuk saat ini, mungkin akan pindah ke vbs dengan lebih banyak fitur di masa depan :) Sejauh ini, menggunakan skrip logon batch sangat sederhana: gema% tanggal%,% waktu%,% nama pengguna%, logon,% nama pengguna% >> \\ server \ logon $ \ logons.csv Buka dengan Excel, dan Anda siap!
Garrett

Apakah skrip login dijalankan sebagai pengguna, dalam hal ini pengguna juga dapat masuk dan memodifikasi log?
James Yale

@ James, inilah sebabnya saya menggunakan share tersembunyi untuk menyimpan log. Tentu saja itu akan tergantung pada seberapa cerdas pengguna Anda, karena lokasi dapat diperoleh hanya dengan membaca skrip. Saya tidak punya masalah dengan set pengguna saya saat ini. :)
John Gardeniers

1
Saya melakukan sesuatu yang serupa, kecuali skrip masuk membuat panggilan ke layanan web yang memperbarui database. Database memiliki front-end web untuk melihat status saat ini. Namun, itu bermasalah bagi pengguna ponsel.
Nic

10

Kami melakukan ini melalui skrip masuk yang memperbarui deskripsi objek komputer dalam AD.

Anda perlu melakukan delegasi kontrol khusus untuk memungkinkan "Pengguna yang Diotentikasi" untuk menulis properti deskripsi objek komputer dalam domain / s.

Setelah selesai, semua yang Anda butuhkan adalah skrip yang menghasilkan informasi apa pun yang Anda inginkan dan menulis properti ke objek komputer. Skrip ini kemudian ditetapkan sebagai skrip login melalui objek Kebijakan Grup yang ditautkan ke domain.

Kami menempatkan stempel waktu, nama pengguna, IP di bidang deskripsi. Stempel waktu lebih dulu karena memudahkan untuk melihat objek komputer "lama" dengan mengurutkan pada bidang deskripsi.

Inilah skrip yang saya tulis untuk ini jika Anda ingin menggunakannya sebagai titik awal:

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

Bagaimana cara mendelegasikan pengguna yang diautentikasi menulis izin ke objek bidang deskripsi dalam AD?
NULL. Bung

6

Saya harus mencapai hasil yang sama karena alasan yang sama; entah bagaimana menentukan mesin dari mana pengguna tertentu masuk. Saya ingin tahu "sebelum fakta", dan tidak dapat mengubah skrip login pengguna seperti yang dibahas di atas.
Saya menggunakan PowerShell pada DC yang diautentikasi oleh pengguna untuk mengurai log peristiwa keamanan:

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

Buka crack .csv dengan excel atau editor favorit Anda dan cari entri terbaru yang memperlihatkan Nama Akun (Nama Pengguna) dan Sumber Jaringan Alamat dalam acara yang sama.
Ini mungkin bukan solusi yang dapat diandalkan 100% (tergantung pada waktu sewa DHCP, dll.), Tetapi ini berhasil bagi saya.



4

Saya hanya menulis nama pengguna (serta info lainnya, seperti tanggal dan waktu, beberapa versi program, dan sebagainya) ke dalam deskripsi komputer menggunakan skrip logon. Dengan cara itu saya dapat menarik semua info dari Pengguna AD & Komputer dengan cepat dan mudah, dan sebagai bonus ada cara yang baik untuk mengidentifikasi PC mana yang masih dalam AD belum digunakan dalam beberapa saat (dan karena itu kemungkinan besar mesin mati).


3

ThatGraemeGuy , terima kasih untuk skrip yang luar biasa! Saya harus menulis ulang di PowerShell, tetapi masih berfungsi.

$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

Trik untuk mengetahui dengan pasti di mana pengguna terakhir masuk selain dari saran dari Adam adalah agregasi log. Jika Anda memiliki beberapa pengontrol domain, Anda harus memeriksa semuanya, atau memusatkan pencatatan Anda dan kemudian memeriksa satu log.

Beberapa, bahkan mungkin sebagian besar, alat pihak ketiga cukup pintar untuk menanyakan semua pengontrol domain. Tetapi jika Anda berpikir untuk menulis skrip untuk menguraikannya sendiri, saya tidak bisa berdebat cukup kuat untuk memusatkan log Anda.


1

Idealnya, Anda akan menangkap yang berikut ini untuk Tim CSIRT Anda untuk membantu dalam invstigations.

userid masuk dengan nama workstation alamat MAC alamat IP Date / timestamp tipe login (rdp, interfactive dll)

Kemudian buang itu ke dalam perintah sql ke dalam database yang mereka dapat query. Potongan-potongan dicatat di semua tempat, tetapi merekam ini menghemat waktu menarik data dari server DHCP / WINS dll ...


1
Saya pikir ini sedikit berlebihan untuk "Hei, apa nama komputer Donny?" tapi mungkin suatu hari nanti kita akan berada di tingkat itu: P
Garrett

0

Satu-satunya cara untuk mendapatkan informasi terbaru adalah melalui pencarian log. Gunakan alat seperti Microsoft Operations Manager atau alat gratis seperti snare untuk menggabungkan log peristiwa menarik dari server ke tempat sentral (file teks normal atau database SQL) dan kemudian gunakan alat seperti logparser atau query SQL untuk menghasilkan laporan yang Anda inginkan.

untuk menemukan ID acara yang berbeda untuk acara yang berbeda, buka Ensiklopedia Log Acara

Beri tahu saya, jika Anda ingin mengikuti rute ini, saya dapat membantu Anda membuat kueri yang sesuai untuk logparser.


0

Jika Anda mencari referensi historis, Anda dapat mencoba alat pihak ke-3 seperti Logon Central dari Motivate Systems. Ini mencatat semua login pengguna Active Directory dan menyediakan antarmuka web untuk penambangan data. Ini juga mencakup beberapa grafik yang cukup bagus yang menerjemahkan statistik masuk ke penggunaan persen.


0

ind Login di AD

Sering kali kita perlu tahu apakah login tertentu adalah bagian dari grup pengguna iklan. Atau kadang-kadang kita perlu tahu grup AD dan ingin tahu siapa semua login itu.

Ada banyak cara berbeda untuk mencapai ini.

Saya ikuti langkah ini untuk membuat pintasan di desktop saya tempat saya dapat dengan mudah menemukan login Silakan ikuti proses sebagai

MULAI-> RUN -> rundll32 dsquery, OpenQueryWindow

Anda dapat menemukan semua AD yang menjadi bagian Anda, menggunakan ini.

Mulai-> Pengaturan-> Panel Kontrol -> Alat Administrator -> Direktori Aktif Pengguna dan Komputer Pilih Domain yang Anda inginkan untuk masuk, klik kanan domain itu dan pilih opsi "Temukan".


0

Saya akan menambahkan ini sebagai komentar untuk jawaban marcusjv di atas, tetapi saya tidak memiliki reputasi sehingga jawaban yang terpisah harus dilakukan:

Dalam ungkapan itu - DAN "Alamat Jaringan Sumber" akan selalu mengevaluasi ke TRUE

Saya pikir yang Anda butuhkan adalah: get-eventlog "Security" | di mana {$ .Message -like "* nama pengguna *" -AND $ .Message.contains ("Source Network Address")}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.