ADSI 根据primarygroupid 搜索primary group 的DistinguishedName
ADSI Search for DistinguishedName of the primary group based on primarygroupid
因为我们的所有系统上都没有可用的活动目录模块,所以我们使用 ADSI
来代替。以下代码使用 AdsiSearcher
:
从 AD 检索用户对象
$ADUser = ([AdsiSearcher]"(samaccountname=$SamAccountName)").FindOne()
这会导致找到 属性 primarygroupid
,它表示用户的域主要组,通常是数字 513
。当我们有这个数字时,我们想找到该组的 distinguishedName
。但是,下面的代码很好我想知道是否有更好的 filter
可以用来代替 FindAll()
方法后的过滤?
$searcher = [adsisearcher]'objectclass=group'
$searcher.PropertiesToLoad.Add('primarygrouptoken')
$searcher.PropertiesToLoad.Add('distinguishedName')
$searcher.FindAll() |
Where-Object { $_.Properties.primarygrouptoken -eq 513}
这样的事情会很棒,但不可能:
([adsisearcher]”(&(objectCategory=group)(primaryGroupid=513))”).FindOne()
primaryGroupToken
是一个 构造的 属性,这意味着它实际上并未在数据库中具体化,也无法使用 LDAP 进行过滤。
为了构建等效过滤器,我们需要查看它是如何构建的 - Active Directory 中的主要组令牌始终与组的 RID 相同objectSid
属性的一部分( 相对标识符 )。
所以,如果我们想按它搜索,我们可以简单地按 objectSid
过滤:
# Obtain domain SID
$dncDN = ([adsi]"LDAP://RootDSE").defaultNamingContext
$dnc = [adsi]"LDAP://$dncDN"
$domainSID = [System.Security.Principal.SecurityIdentifier]::new($dnc.objectSid.Value, 0)
# Set the group ID we're looking for
$RID = 513
# Search for group by objectSid value:
([adsisearcher]"(&(objectCategory=group)(objectSid=${domainSID}-${RID}))").FindOne()
因为我们的所有系统上都没有可用的活动目录模块,所以我们使用 ADSI
来代替。以下代码使用 AdsiSearcher
:
$ADUser = ([AdsiSearcher]"(samaccountname=$SamAccountName)").FindOne()
这会导致找到 属性 primarygroupid
,它表示用户的域主要组,通常是数字 513
。当我们有这个数字时,我们想找到该组的 distinguishedName
。但是,下面的代码很好我想知道是否有更好的 filter
可以用来代替 FindAll()
方法后的过滤?
$searcher = [adsisearcher]'objectclass=group'
$searcher.PropertiesToLoad.Add('primarygrouptoken')
$searcher.PropertiesToLoad.Add('distinguishedName')
$searcher.FindAll() |
Where-Object { $_.Properties.primarygrouptoken -eq 513}
这样的事情会很棒,但不可能:
([adsisearcher]”(&(objectCategory=group)(primaryGroupid=513))”).FindOne()
primaryGroupToken
是一个 构造的 属性,这意味着它实际上并未在数据库中具体化,也无法使用 LDAP 进行过滤。
为了构建等效过滤器,我们需要查看它是如何构建的 - Active Directory 中的主要组令牌始终与组的 RID 相同objectSid
属性的一部分( 相对标识符 )。
所以,如果我们想按它搜索,我们可以简单地按 objectSid
过滤:
# Obtain domain SID
$dncDN = ([adsi]"LDAP://RootDSE").defaultNamingContext
$dnc = [adsi]"LDAP://$dncDN"
$domainSID = [System.Security.Principal.SecurityIdentifier]::new($dnc.objectSid.Value, 0)
# Set the group ID we're looking for
$RID = 513
# Search for group by objectSid value:
([adsisearcher]"(&(objectCategory=group)(objectSid=${domainSID}-${RID}))").FindOne()