pengembangan-web-mp.com

Cara terbaik untuk menemukan komputer tempat pengguna terakhir masuk?

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 kebetulan hanya bekerja untuk membuka kunci stasiun, itu akan lebih baik!

24
Garrett

Sebagai bagian dari skrip logon kami, saya memiliki informasi tersebut (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.

26
John Gardeniers

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

Anda perlu melakukan delegasi kontrol khusus untuk mengizinkan "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 yang diutamakan karena membuatnya mudah untuk dengan cepat 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
10
ThatGraemeGuy

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 menguraikan 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 menunjukkan 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.

6
marcusjv

Anda dapat mengaktifkan audit untuk acara masuk akun. Ini acara (termasuk membuka workstation) akan disimpan dalam log keamanan DC.

Ada juga alat pihak ketiga yang dapat mempermudah ini, seperti True Last Logon .

6
Adam Brand

Saya hanya menulis nama pengguna (juga 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).

4
Maximus Minimus

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 '[email protected]: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()
3

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 sentralisasi log Anda.

2
Laura Thomas

Idealnya, Anda akan menangkap yang berikut 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
Scott

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 {$ . Pesan-like "* username *" -AND $. Message.contains ("Source Network Address")}

1
SS64

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
Lepide

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, kunjungi Ensiklopedia Log Acara

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

0
KAPes

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

0
Scott