find用户上次login的计算机的最佳方法?

我希望在Active Directory的某个地方写入/存储“最后一次login[计算机]”,或者有一个我可以parsing的日志?

想知道最后一台电脑login的目的是为了通过networking提供远程支持 – 我们的用户移动相当less,但我想知道,无论我正在咨询更新当天上午(当他们login,大概是)至less。

我还在考虑将用户和计算机名称写入我可以参考的已知位置的login脚本,但是我们的一些用户不喜欢一次注销15天。

如果有一个使用login脚本的优雅的解决scheme,一定要提到它 – 但是如果它恰好为解锁站点而工作,那将更好!

作为login脚本的一部分,我将这些信息(以及更多)logging到服务器上的隐藏共享中,每个用户都有一个日志文件。 注销脚本会将用户注销的时间添加到同一个日志文件中。 易于设置,没有成本,信息在一个易于阅读的格式。

我们通过login脚本来完成这个工作,它在AD中更新计算机对象的描述。

您需要执行一个自定义的控制委派,以允许“已authentication的用户”在域中写入计算机对象的描述属性。

一旦完成,所有你需要的是一个脚本,它可以生成你想要的任何信息,并将这些属性写入计算机对象。 然后通过链接到域的组策略对象将该脚本指定为login脚本。

我们在描述字段中添加了一个时间戳,用户名,IP地址。 时间戳首先是因为它可以通过在描述字段上sorting来快速查看“旧”计算机对象。

这是我为此写的脚本,如果你想用它作为一个起点:

On Error Resume Next Set objSysInfo = CreateObject("ADSystemInfo") 'Bind to AD Set objNet = CreateObject("WScript.Network") strCompDN = objSysInfo.ComputerName 'DN for computer, eg "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, eg "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 

出于类似的原因我必须得到同样的结果。 以某种方式确定特定用户从哪个机器login。 我想知道“事实之前”,并且不能像上面讨论的那样改变用户login脚本。
我在用户进行身份validation的DC上使用了powershell来parsing安全事件日志:

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

使用excel或fav编辑器打开.csv文件,查找在同一事件中显示帐户名称(用户名)和源networking地址的最新条目。
这可能不是100%可靠的解决scheme(取决于DHCP租用时间等),但它对我有用。

您可以启用帐户login事件审计 。 这些事件 (包括工作站解锁)将存储在DC的安​​全日志中。

还有第三方工具,可以使这更容易,如真正的最后login 。

我只是使用login脚本将用户名(以及其他信息,如date和时间,某些程序版本等)写入计算机描述中。 这样我就可以快速方便地从AD用户和计算机上获取所有的信息,作为一个奖励,有一个很好的方法可以确定哪些PC还在AD中,因此一段时间内没有被使用(因此很可能是死机)。

知道用户最后loginAdam的build议的地方的技巧就是日志聚合。 如果您有多个域控制器,则必须全部检查它们,或集中您的日志logging,然后检查单个日志。

有些甚至大部分第三方工具足够聪明,可以查询所有的域控制器。 但是如果你想写一个脚本来parsing它自己,我不能强烈地争辩你的日志集中化。

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() 

只有通过日志觅食才能获得最新的信息。 使用诸如Microsoft Operations Manager之类的工具或像snare这样的免费工具将感兴趣的事件日志从服务器聚集到中心位置(普通文本文件或SQL数据库),然后使用诸如logparser或SQL查询之类的工具来生成所需的报告。

为不同的事件寻找不同的事件ID通过事件日志百科全书

让我知道,如果你想遵循这个路线,我可以帮你创build适合logparser的查询。

理想情况下,您将为CSIRT小组捕捉以下内容来协助激励。

useridlogin工作站名称MAC地址IP地址date/时间戳记logintypes(rdp,interfactive等)

然后将其转储到一个sql命令到他们可以查询的数据库中。 比特和片断被logging到所有地方,但是logging这节省了时间从DHCP / WINS服务器等拉动数据…

如果你在寻找一个历史的参考,你可以尝试第三方工具,如Motivate Systems的Logon Central 。 它logging所有Active Directory用户login并提供用于数据挖掘的Web界面。 它还包括一些相当不错的图表,将login统计转化为百分比使用。

ind在ADlogin

很多时候,我们需要知道特定的login信息是否是广告用户组的一部分。 或者有时我们需要了解一个AD组,并想知道所有login是谁的一部分。

有很多不同的方法来实现这一点。

我按照这个步骤在我的桌面上创build一个快捷方式,我可以很容易地findlogin请按照过程

START-> RUN – > rundll32 dsquery,OpenQueryWindow

你可以用这个find你所属的所有AD。

开始 – >设置 – >控制面板 – >pipe理员工具 – > Active Directory用户和计算机select要查找login的域,右键单击该域并select“查找”选项。