WinNT:// 提供程序何时查询 Active Directory?或者如果是域帐户如何获取本地组成员的 SID

When does WinNT:// provider query Active Directory? Or how to get SID of local group member if it is domain account

好的,所以我使用带有 DirectoryEntry class 的 WinNT 提供程序来枚举本地组的成员,通过 Members 属性。

如果成员是本地帐户,DirectoryEntry 也可能会从本地计算机上的 SAM 中读取。

但是,如果成员是域帐户,当我访问 DirectoryEntry 对象的属性时,提供商是否会执行对 Active Directory 的查询?

有没有办法区分这两种情况?例如,检查 DirectoryEntry 上的 属性 以查看它是否要从本地计算机 SAM 获取属性,或者通过查询域控制器来读取 Active Directory?

有没有办法在不查询 Active Directory 的情况下获取成员的名称(甚至只是 SID)

我正在尝试枚举大量服务器上的本地组并且不想攻击域控制器,如果它们包含许多域用户帐户的话。

您可以查询 Win32_GroupUser,那根本不应该命中 AD。然后你只需要做一些字符串解析来获取用户名、用户类型(user/group)和来源(local/domain)。

$Servers = 'Server1.domain.com','Server2.domain.com'
$GMembers = ForEach($Server in $Servers){
    $BaseName=$Server.split('.')[0]
    Get-WmiObject -ComputerName $Server -Query "SELECT * FROM win32_GroupUser WHERE GroupComponent = ""Win32_Group.Domain='$BaseName',Name='Administrators'"""
}
$GMembers | 
    ?{$_.PartComponent -match '\\(.+?)\.+?Win32_(.+?)\.Domain="(.+?)",Name="(.+?)"'}|
    %{
        [PSCustomObject]@{
            Server=$Matches[1]
            Domain=$Matches[3]
            Account=$Matches[4]
            AccountType=$Matches[2]
        }
    }