检索通过AD登录的计算机名称admin帐户

时间:2017-09-26 00:56:58

标签: powershell

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

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

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

$objreport+=@($objoutput)
}#end for

return $objreport
}#end function

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

1 个答案:

答案 0 :(得分:1)

单独使用AD无法做到这一点。 我们在这说多少台电脑?不过,我会利用事件日志。每个登录事件都存储并具有登录(或触发事件)的用户的SID。事件7001(登录)是您正在寻找的。

您可以使用een XML格式检索这些事件。此XML包含已触发事件的用户的SID。您可以使用.NET转换函数将其转换为SamAccountName,也可以从AD中检索所有SID并以这种方式进行比较(因此可以使用hasbtable)。

我前段时间写了一个脚本,它使用了很多这些技巧。 它旨在查看用户何时登录和关闭并锁定和解锁其计算机。你可以在这里找到一篇关于它的博客文章:

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

该博文还引用了github,您可以在其中找到我制作的脚本。

通过一些调整,您可以将其变成您需要的工具。