कंप्यूटर को अंतिम रूप से लॉग ऑन करने के लिए उपयोगकर्ता को खोजने का सबसे अच्छा तरीका है?


23

मुझे उम्मीद है कि कहीं सक्रिय निर्देशिका में "[कंप्यूटर से अंतिम लॉग ऑन" लिखा हुआ है / संग्रहीत है, या एक लॉग है जिसे मैं बाहर कर सकता हूं?

अंतिम पीसी से लॉग ऑन करने के बारे में जानने का उद्देश्य नेटवर्क पर दूरस्थ समर्थन की पेशकश करने के लिए है - हमारे उपयोगकर्ता बहुत बार घूमते हैं, लेकिन मैं यह जानना चाहूंगा कि जो भी मैं परामर्श कर रहा हूं वह उस सुबह अपडेट हो रहा था (जब उन्होंने लॉग इन किया था) , संभवतः) न्यूनतम पर।

मैं लॉगिन स्क्रिप्ट पर भी विचार कर रहा हूं जो उपयोगकर्ता और कंप्यूटर के नाम को एक ज्ञात स्थान पर लिख सकता है जिसे मैं संदर्भित कर सकता हूं, लेकिन हमारे कुछ उपयोगकर्ता एक बार में 15 दिनों के लिए लॉगआउट करना पसंद नहीं करते हैं।

यदि कोई सुरुचिपूर्ण समाधान है जो लॉगिन स्क्रिप्ट का उपयोग करता है, तो निश्चित रूप से इसका उल्लेख करें - लेकिन अगर यह स्टेशन को अनलॉक करने के लिए काम करता है, तो यह और भी बेहतर होगा!

जवाबों:


26

हमारी लॉगऑन स्क्रिप्ट के हिस्से के रूप में मेरे पास वह जानकारी (और अधिक) एक सर्वर पर एक छिपे हुए शेयर में लॉग होती है, जिसमें प्रति उपयोगकर्ता एक लॉग फाइल होती है। एक लॉगऑफ स्क्रिप्ट उस समय को जोड़ता है जब उपयोगकर्ता उसी लॉग फ़ाइल में लॉग इन किया था। स्थापित करने में आसान, कोई लागत नहीं है और जानकारी को पढ़ने के लिए आसान प्रारूप में है।


साथ ही, लॉग को जोड़कर, आपको एक ऐतिहासिक रिकॉर्ड मिलता है, जो कई बार बहुत काम आ सकता है।
जॉन गार्डनियर्स

1
इसे अभी के लिए लागू किया गया है, संभवतः भविष्य में अधिक सुविधाओं के साथ एक vbs में चला जाएगा :) अब तक, एक बहुत ही सरल बैच लॉगऑन स्क्रिप्ट का उपयोग करते हुए: गूंज% दिनांक%,% समय%,% उपयोगकर्ता नाम%, लॉगऑन,% कम्प्यूटेशनल नाम 1 \\ सर्वर \ logon $ \ logons.csv एक्सेल के साथ खोलें, और आप सेट हैं!
गैरेट

क्या लॉगिन स्क्रिप्ट उपयोगकर्ता के रूप में चलती है, जिस स्थिति में उपयोगकर्ता लॉग में भी जा सकता है और संशोधित हो सकता है?
जेम्स येल

@ जेम्स, यही कारण है कि मैं लॉग्स को स्टोर करने के लिए एक छिपे हुए हिस्से का उपयोग करता हूं। बेशक यह सिर्फ इस बात पर निर्भर करेगा कि आपके उपयोगकर्ता कितने समझदार हैं, क्योंकि केवल स्क्रिप्ट पढ़ने से स्थान प्राप्त किया जा सकता है। मुझे अपने उपयोगकर्ताओं के वर्तमान सेट के साथ यह समस्या नहीं है। :)
जॉन गार्डनियर्स

1
मैंने ऐसा ही कुछ किया, सिवाय इसके कि लॉगऑन स्क्रिप्ट ने एक वेब सेवा को कॉल किया जिसने एक डेटाबेस को अपडेट किया। वर्तमान स्थिति को देखने के लिए डेटाबेस में एक वेब फ्रंट-एंड था। हालाँकि, यह मोबाइल उपयोगकर्ताओं के लिए समस्याग्रस्त था।
निक

10

हम इसे लॉगऑन स्क्रिप्ट के माध्यम से करते हैं जो AD में कंप्यूटर ऑब्जेक्ट के विवरण को अपडेट करता है।

आपको "प्रमाणित उपयोगकर्ताओं" को डोमेन / एस में कंप्यूटर ऑब्जेक्ट्स की विवरण संपत्ति लिखने की अनुमति देने के लिए नियंत्रण का एक कस्टम प्रतिनिधिमंडल करने की आवश्यकता है।

एक बार जब यह हो जाता है, तो आपको केवल एक स्क्रिप्ट की आवश्यकता होती है, जो आपको जो भी जानकारी चाहिए वह उत्पन्न करती है और कंप्यूटर ऑब्जेक्ट के गुणों को लिखती है। इस स्क्रिप्ट को तब डोमेन से जुड़ी समूह नीति ऑब्जेक्ट के माध्यम से एक लॉगिन स्क्रिप्ट के रूप में सौंपा गया है।

हम विवरण क्षेत्र में टाइमस्टैम्प, उपयोगकर्ता नाम, आईपी डालते हैं। टाइमस्टैम्प पहले आता है क्योंकि यह विवरण क्षेत्र पर छँटाई करके "पुराने" कंप्यूटर ऑब्जेक्ट्स को जल्दी से देखना आसान बनाता है।

इस स्क्रिप्ट को मैंने इसके लिए लिखा है यदि आप इसे एक प्रारंभिक बिंदु के रूप में उपयोग करना चाहते हैं:

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

मुझे समान कारणों के लिए समान परिणाम प्राप्त करना था; किसी तरह निर्धारित करें कि किस मशीन ने उपयोगकर्ता को लॉग इन किया है। मैं "तथ्य से पहले" जानना चाहता था, और उपर्युक्त चर्चा के अनुसार उपयोगकर्ता लॉगिन स्क्रिप्ट नहीं बदल सकता था।
मैंने DC पर ऐसे शब्‍दावली का प्रयोग किया कि उपयोगकर्ता सुरक्षा ईवेंट लॉग को पार्स करने के लिए प्रमाणित कर रहा था:

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

क्रैक एक्सेल या अपने fav संपादक के साथ खोलें। और सबसे हाल की प्रविष्टि की तलाश करें जो एक ही घटना के भीतर खाता नाम (उपयोगकर्ता नाम) और स्रोत नेटवर्क पते दोनों को दिखाता है।
यह 100% विश्वसनीय समाधान नहीं हो सकता है (डीएचसीपी लीज समय आदि के आधार पर), लेकिन यह मेरे लिए काम करता है।


6

आप खाता लॉगऑन ईवेंट के लिए ऑडिटिंग सक्षम कर सकते हैं। इन घटनाओं (वर्कस्टेशन अनलॉक सहित) को डीसी के सुरक्षा लॉग में संग्रहीत किया जाएगा।

थर्ड पार्टी टूल्स भी हैं जो इसे आसान बना सकते हैं, जैसे ट्रू लास्ट लोगन


4

मैं सिर्फ लॉगऑन स्क्रिप्ट का उपयोग करके कंप्यूटर विवरण में उपयोगकर्ता नाम (साथ ही अन्य जानकारी, जैसे दिनांक और समय, कुछ प्रोग्राम संस्करण और इतने पर) लिखता हूं। इस तरह मैं AD उपयोगकर्ता और कंप्यूटर से सभी जानकारी जल्दी और आसानी से खींच सकता हूं, और एक बोनस के रूप में पहचानने का एक अच्छा तरीका है जो अभी भी 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 टीम के लिए निम्नलिखित को कैप्चर करने में सहायता करेंगे।

उपयोगकर्ता का कार्यस्थान नाम मैक पते आईपी पते के साथ लॉगिंग दिनांक / टाइमस्टैम्प लॉगिन प्रकार (आरडीपी, इंटरएक्टिव आदि)

फिर एक sql कमांड में डेटाबेस में डंप करें जिसे वे क्वेरी कर सकते हैं। बिट्स और टुकड़ों को सभी जगह लॉग किया जाता है, लेकिन इसे रिकॉर्ड करने से डीएचसीपी / विनस सर्वर आदि से डेटा खींचने में समय की बचत होती है ...


1
मुझे लगता है कि यह "हे, डॉनी का कंप्यूटर नाम क्या है?" लेकिन शायद किसी दिन हम उस स्तर पर होंगे: पी
गैरेट

0

केवल नवीनतम जानकारी रखने का एकमात्र तरीका लॉग लॉगिंग है। Microsoft ऑपरेशन मैनेजर जैसे टूल का उपयोग करें या सर्वर से नि: शुल्क टूल जैसे कि रोचक ईवेंट लॉग को केंद्रीय स्थान (सामान्य पाठ फ़ाइलें या SQL डेटाबेस) में एकत्रित करें और फिर अपनी इच्छित रिपोर्ट उत्पन्न करने के लिए लॉगरपेर या SQL क्वेरी जैसे टूल का उपयोग करें।

अलग-अलग घटनाओं के लिए अलग-अलग ईवेंट आईडी खोजने के लिए ईवेंट लॉग इनसाइक्लोपीडिया पर जाएं

मुझे बताएं, यदि आप इस मार्ग का अनुसरण करना चाहते हैं, तो मैं आपको लॉगरपेर के लिए उपयुक्त प्रश्न बनाने में मदद कर सकता हूं।


0

यदि आप एक ऐतिहासिक संदर्भ की तलाश में हैं, तो आप मोटिवेट सिस्टम्स से लोगन सेंट्रल जैसे एक 3 पार्टी टूल की कोशिश कर सकते हैं । यह सभी सक्रिय निर्देशिका उपयोगकर्ता लॉगऑन रिकॉर्ड करता है और डेटा माइनिंग के लिए एक वेब इंटरफ़ेस प्रदान करता है। इसमें कुछ बहुत अच्छे ग्राफ़ भी शामिल हैं जो लॉगऑन आँकड़ों को प्रतिशत उपयोग में बदल देते हैं।


0

ईस्वी सन् में ई.डी.

कई बार हमें यह जानना होता है कि क्या विशेष लॉगिन विज्ञापन उपयोगकर्ता समूह का हिस्सा है। या कभी-कभी हमें एक एडी समूह को जानने की आवश्यकता होती है और यह जानना चाहता है कि सभी लॉगिन इसका हिस्सा कौन हैं।

इसे प्राप्त करने के कई अलग-अलग तरीके हैं।

मैं अपने डेस्कटॉप पर एक शॉर्टकट बनाने के लिए इस चरण का पालन करता हूं जहां मैं आसानी से लॉगिन पा सकता हूं कृपया इस प्रक्रिया का पालन करें

START-> RUN -> rundll32 dsquery, OpenQueryWindow

आप इसका उपयोग करके सभी एडी को पा सकते हैं।

प्रारंभ-> सेटिंग्स-> नियंत्रण कक्ष -> प्रशासक उपकरण -> सक्रिय निर्देशिका उपयोगकर्ता और कंप्यूटर उस डोमेन का चयन करें जिसे आप लॉगिन ढूंढना चाहते हैं, उस डोमेन पर राइट क्लिक करें और "खोजें" विकल्प चुनें।


0

मैं इसे marcusjv के उत्तर के ऊपर एक टिप्पणी के रूप में जोड़ने जा रहा था, लेकिन मेरे पास प्रतिष्ठा नहीं है इसलिए एक अलग उत्तर देना होगा:

उस अभिव्यक्ति में -और "स्रोत नेटवर्क पता" हमेशा TRUE का मूल्यांकन करेगा

मुझे लगता है कि आपको क्या चाहिए: get-eventlog "Security" | जहां {$। मेसेज-लाइक ”* यूजरनेम *” -और $। मेसेजेज.कॉन्स्टेंस (“सोर्स नेटवर्क” ”)}}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.