Bir kullanıcının en son oturum açtığı bilgisayarı bulmanın en iyi yolu?


23

Active Directory'de bir yerde "son [bilgisayardan] oturum açtı" nın yazıldığını / saklandığını veya ayrıştırabileceğim bir günlük olduğunu umuyorum.

En son oturum açan PC'yi bilmek istemenin amacı, ağ üzerinden uzaktan destek sunmaktır - kullanıcılarımız nadiren hareket ederler, ancak danışmanlık yaptığımın ne olduğunu o sabah güncellediğini bilmek istiyorum (giriş yaptıklarında , muhtemelen) en azından.

Ayrıca, kullanıcı ve bilgisayar adlarını başvuruda bulunabileceğim bilinen bir konuma yazan oturum açma komut dosyaları da düşünüyorum, ancak bazı kullanıcılarımız bir seferde 15 gün boyunca oturum kapatmayı sevmiyor.

Oturum açma komut dosyaları kullanan zarif bir çözüm varsa, kesinlikle belirtin - ancak istasyonun kilidini açmak için işe yararsa, bu daha iyi olurdu!

Yanıtlar:


26

Oturum açma komut dosyamızın bir parçası olarak, bu bilgiler (ve daha fazlası) bir sunucudaki gizli bir paylaşımda oturum açmış ve kullanıcı başına bir günlük dosyası var. Bir oturum kapatma komut dosyası, kullanıcının aynı günlük dosyasına oturumu kapattığı süreyi ekler. Kurulumu kolay, masrafı yok ve bilgi kolay okunabilen bir formatta.


Ayrıca, kayıtlara ekleyerek, zaman zaman çok kullanışlı olabilecek tarihsel bir kayıt elde edersiniz.
John Gardeniers

1
Şimdilik bunu uyguladı, muhtemelen gelecekte daha fazla özellik içeren bir vbs'ye geçecek :) Şimdiye dek, ÇOK basit bir toplu oturum açma komut dosyası kullanarak: echo% tarih%,% zaman%,% kullanıcı adı%, oturum açma,% bilgisayar kullanıcı% >> \\ server \ logon $ \ logons.csv Excel ile açın ve hazırsınız!
Garrett

Giriş betiği kullanıcı olarak çalışıyor mu, bu durumda kullanıcı da giriş yapıp günlüğü değiştirebilir mi?
James Yale,

@ James, bu yüzden günlükleri depolamak için gizli bir paylaşım kullanıyorum. Tabii ki, sadece betiği okuyarak konum elde edilebileceği için, kullanıcılarınızın ne kadar anlayışlı olduğuna bağlı olacaktır. Şu anki kullanıcı grubumla ilgili bir sorunum yok. :)
John Gardeniers,

1
Benzer bir şey yaptım, oturum açma komut dosyası, bir veritabanını güncelleyen bir web servisine çağrı yapmış. Veritabanının mevcut durumu görüntülemek için bir web ön yüzü vardı. Ancak, mobil kullanıcılar için sorunluydu.
Nic

10

Bunu, bilgisayar nesnesinin AD'deki açıklamasını güncelleyen oturum açma komut dosyası ile yapıyoruz.

"Kimliği Doğrulanmış Kullanıcılar" ın bilgisayar nesnelerinin açıklama özelliğini etki alanlarına / s'larına yazmasına izin vermek için özel bir denetim temsilcisi seçmeniz gerekir.

Bu yapıldıktan sonra, tek ihtiyacınız olan, istediğiniz bilgiyi üreten ve özellikleri bilgisayar nesnesine yazan bir betiktir. Bu komut dosyası daha sonra, etki alanına bağlı bir Grup İlkesi nesnesi aracılığıyla bir giriş komut dosyası olarak atanır.

Açıklama alanına bir zaman damgası, kullanıcı adı, IP (ler) koyduk. Zaman damgası önce gelir, çünkü açıklama alanını sıralayarak "eski" bilgisayar nesnelerini hızlıca görmeyi kolaylaştırır.

İşte başlangıç ​​noktası olarak kullanmak istiyorsanız, bunun için yazdığım senaryo:

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

Kimliği doğrulanmış kullanıcılar, AD'deki açıklama alanı nesnesine izin açıklığı yazma yetkisi nasıl atayabilir?
NULL.Dude

6

Benzer nedenlerle aynı sonucu elde etmek zorunda kaldım; Her nasılsa, belirli bir kullanıcının hangi makineden giriş yaptığını belirler. "Aslında önce" bilmek istedim ve kullanıcı oturum açma komut dosyalarını yukarıda tartışıldığı gibi değiştiremedim.
DC'de, kullanıcının Güvenlik olay günlüğünü ayrıştırmak için kimliğini doğrulamak için kullandığı powershell'i kullandım:

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

.Csv dosyasını excel veya fav editörünüzle açın ve aynı etkinlik içinde hem Hesap Adı (Kullanıcı Adı) hem de Kaynak Ağ Adresini gösteren en yeni girişi arayın.
Bu% 100 güvenilir bir çözüm olmayabilir (DHCP kiralama sürelerine, vb. Bağlı olarak), ancak benim için çalıştı.



4

Kullanıcı adını (tarih ve saat, bazı program sürümleri vb. Gibi diğer bilgilerin yanı sıra) bir oturum açma komut dosyası kullanarak bilgisayar açıklamasına da yazarım. Bu yolla tüm bilgileri AD Users & Computers'dan hızlı ve kolay bir şekilde alabilirim ve bir bonus olarak, hala AD'de hangi PC'lerin bir süredir kullanılmadığını (ve bu nedenle büyük olasılıkla ölü makineler) belirlemenin iyi bir yolunu bulabilirim.


3

ThatGraemeGuy , mükemmel senaryo için teşekkürler! PowerShell'de yeniden yazmak zorunda kaldım ama yine de çalışıyor.

$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

Kullanıcıların önerilerini bir kenara en son ne zaman giriş yaptıklarını bilmenin püf noktası log toplamasıdır. Birden fazla etki alanı denetleyiciniz varsa, hepsini denetlemeniz ya da günlüğünüzü merkezileştirmeniz ve ardından tek günlüğü kontrol etmeniz gerekir.

Bazı, belki de çoğu, üçüncü taraf araçları, tüm etki alanı denetleyicilerini sorgulayacak kadar akıllıdır. Ancak, onu ayrıştırmak için bir senaryo yazmayı düşünüyorsanız, günlüklerinizin merkezileştirilmesi için yeterince güçlü bir şekilde tartışamam.


1

İdeal olarak, CSIRT Ekibinizin araştırmalara yardımcı olması için aşağıdakileri yakalarsınız.

kullanıcı adı, iş istasyonu adıyla oturum açma MAC adresi IP adresi Tarih / Zaman damgası giriş türü (rdp, arabirim vb.)

Sonra bunu bir sql komutuna, sorgulayabilecekleri bir veritabanına at. Bitler ve parçalar her tarafa kaydedilir, ancak bunun kaydedilmesi, verileri DHCP / WINS sunucularından vb. Çekerek zaman kazandırır ...


1
Bence "Hey, Donny'nin bilgisayar adı ne?" ama belki bir gün bu seviyede olacağız: P
Garrett

0

En son bilgilere sahip olmanın tek yolu kütük taramasıdır. Microsoft Operations Manager gibi bir araç veya ilginç olay günlüklerini sunucudan merkezi bir yere (normal metin dosyaları veya SQL veritabanı) toplamak için trampet gibi ücretsiz bir araç kullanın ve ardından istediğiniz raporu oluşturmak için logparser veya SQL sorguları gibi araçları kullanın.

farklı etkinlikler için farklı olay kimlikleri bulmak için, Olay Günlüğü Ansiklopedisi bölümüne gidin.

Bu rotayı takip etmek istiyorsanız, logparser için uygun sorguları oluşturmanıza yardımcı olabilirim.


0

Tarihsel bir referans arıyorsanız , Motivate Systems'den Logon Central gibi bir üçüncü taraf aracı deneyebilirsiniz . Tüm Active Directory kullanıcı oturumlarını kaydeder ve veri madenciliği için bir web arayüzü sağlar. Ayrıca, oturum açma istatistiklerini yüzde kullanımına çeviren oldukça iyi grafikler içerir.


0

ind AD'de giriş yapın

Çoğu zaman, belirli bir girişin reklam kullanıcısı grubunun bir parçası olup olmadığını bilmemiz gerekir. Ya da bazen bir AD grubunu bilmemiz gerekir ve tüm girişlerin kimlerin olduğunu bilmek isteriz.

Bunu başarmanın birçok farklı yolu vardır.

Masaüstümde girişleri kolayca bulabileceğim bir kısayol oluşturmak için bu adımı uygularım.

Başlat-> RUN -> rundll32 dsquery, OpenQueryWindow

Bunu kullanarak parçası olduğunuz tüm reklamları bulabilirsiniz.

Başlat-> Ayarlar-> Denetim Masası -> Yönetici Araçları -> Active Directory Kullanıcısı ve Bilgisayarları Giriş bulmak istediğiniz alanı seçin, o alana sağ tıklayın ve “Bul” seçeneğini seçin.


0

Bunu marcusjv'in yukarıdaki cevabına bir yorum olarak ekleyecektim, ancak ayrı bir cevabın yapması gereken bir üne sahip değilim:

Bu ifadede -ve "Kaynak Ağ Adresi" her zaman TRUE olarak değerlendirilir.

İhtiyacınız olan şey olduğunu düşünüyorum: get-eventlog "Güvenlik" | nerede {$ .Message-like "* kullaniciadi *" -AND $ .Message.contains ("Kaynak Ağ Adresi")}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.