[英]When does WinNT:// provider query Active Directory? Or how to get SID of local group member if it is domain account
好的,所以我将WinNT提供程序与DirectoryEntry类一起使用,通过Members属性来枚举本地组的成员 。
如果成员是本地帐户,则大概也会从本地计算机上的SAM中读取DirectoryEntry。
但是,如果成员是域帐户,当我访问DirectoryEntry对象的属性时,提供程序是否将对Active Directory执行查询?
有没有办法区分这两种情况? 例如,检查DirectoryEntry上的属性以查看它是要从本地计算机SAM中获取属性,还是查询域控制器以读取Active Directory?
有没有一种方法可以获取成员的名称(甚至只是SID) 而无需查询Active Directory?
我正在尝试枚举大量服务器上的本地组,并且如果它们包含许多域用户帐户,则不想重击域控制器。
您可以查询Win32_GroupUser,这根本不会打AD。 然后,您只需要进行一些字符串解析即可获取用户名,用户类型(用户/组)和源(本地/域)。
$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]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.