2017-09-26 171 views
0

如何检索管理员帐户登录的Active Directory中的计算机名称及其IP地址?检索通过AD登录的计算机名称admin帐户

我可以检索本地管理员帐户与我下面的脚本:

function get-localadministrators { 
param ([string]$computername=$env:computername) 

$computername = $computername.toupper() 
$ADMINS = get-wmiobject -computername $computername -query "select * from win32_groupuser where GroupComponent=""Win32_Group.Domain='$computername',Name='administrators'""" | % {$_.partcomponent} 

foreach ($ADMIN in $ADMINS) { 
      $admin = $admin.replace("$computernamerootcimv2:Win32_UserAccount.Domain=","") # trims the results for a user 
      $admin = $admin.replace("$computernamerootcimv2:Win32_Group.Domain=","") # trims the results for a group 
      $admin = $admin.replace('",Name="',"") 
      $admin = $admin.REPLACE("""","")#strips the last " 

      $objOutput = New-Object PSObject -Property @{ 
       Machinename = $computername 
       Fullname = ($admin) 
       DomainName =$admin.split("")[0] 
       UserName = $admin.split("")[1] 
      }#end object 

[email protected]($objoutput) 
}#end for 

return $objreport 
}#end function 

但我想是的管理员登录到计算机返回所有实例。这是可能的还是有什么会返回类似的结果?

+0

你想要一个当前登录的用户是Active Directory管理员组成员的计算机列表吗? Active Directory不存储该信息。只有计算机本身知道谁登录。您需要连接到域中的每台计算机,并在该计算机上查询在交互式会话或控制台会话中登录的用户列表。 –

+0

刚刚列出IP /子网掩码和计算机名称怎么样?这是可行的吗? @BaconBits –

+0

Active Directory并不知道有关IP地址或子网的任何信息。 AD骑在DNS之上。 DNS是你的主机名到IP地址查找的地方。但是,DNS并不知道有关子网的任何信息。再次,你不得不问客户端计算机使用的是什么子网掩码。您可以设置AD站点和服务,也许可以通过这种方式获取信息,但这样做的目的是根据您使用的逻辑地址来描述物理结构,以便可以在WAN链路上管理站点间流量。 –

回答

1

你不可能仅凭AD就能做到这一点。 我们在这里说几台电脑?不过,我会利用eventlog。每个登录事件都存储并具有登录的用户的SID(或触发事件)。事件7001(登录)是您正在寻找。

您可以以een XML格式检索这些事件。该XML包含触发事件的用户的SID。您可以使用.NET翻译功能将其转换为SamAccountName,或者您可以从AD中检索所有SID,并以这种方式比较它们(因此可以使用hasbtable)。

我前段时间写过一个脚本,使用了很多这些技术。 这是为了看到用户何时登录和关闭并锁定和解锁他们的计算机。你可以在这里找到一个博客帖子大约是:

https://cookiecrumbles.github.io/GetLogonEventViewer/

这博文还引用了GitHub上,你可以找到我所做的脚本。

随着一些调整,你可以把它变成你需要的工具。

相关问题