Active-Directory

查找使用者上次登錄的電腦的最佳方法是什麼?

  • October 13, 2019

我希望在 Active Directory 中的某個地方“最後一次登錄

$$ computer $$" 被寫入/儲存,或者有一個我可以解析出來的日誌? 想知道上次登錄的 PC 的目的是通過網路提供遠端支持 - 我們的使用者很少四處走動,但我想知道那天早上我所諮詢的任何內容都在更新(當他們登錄時) ,大概)至少。

我還在考慮將使用者名和電腦名寫入我可以參考的已知位置的登錄腳本,但我們的一些使用者不喜歡一次註銷 15 天。

如果有一個使用登錄腳本的優雅解決方案,一定要提到它——但如果它恰好用於解鎖站點,那就更好了!

作為我們登錄腳本的一部分,我將這些資訊(以及更多資訊)登錄到伺服器上的隱藏共享中,每個使用者都有一個日誌文件。註銷腳本將使用者註銷的時間添加到同一日誌文件中。易於設置,無成本,資訊以易於閱讀的格式保存。

我們通過登錄腳本來更新電腦對像在 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

引用自:https://serverfault.com/questions/44862