我想知道交付用户名的用户是否是交付组名的组的成员。
$u = Get-WmiObject -Class Win32_UserAccount -Filter "Name='$username'"
$g = Get-WmiObject -Class Win32_Group -Filter "Name='$groupname'"
所以我得到了两个带有属性SID的对象。
如何检查用户$u
是否为$g
组成员?
答案 0 :(得分:1)
您可以使用Associators
查询(example)执行此操作。这是出了名的慢,但工作。
$u = Get-WmiObject -Class Win32_UserAccount -Filter "Name='user'"
$group = Get-WmiObject -Class Win32_Group -Filter "Name='group'" | Select-Object -ExpandProperty Caption
$u | foreach {
$query = “Associators Of {Win32_UserAccount.Domain='” `
+ $_.Domain + “',Name='” + $_.Name `
+ “'} WHERE AssocClass=Win32_GroupUser”
$memberOf = Get-WmiObject -Query $query |
select -ExpandProperty Caption
If($memberOf -contains $group){
Write-Host "$($_.Name) is a member of $group"
} Else {
Write-Host "$($_.Name) is not a member of $group"
}
}
获取您正在寻找的用途并将您正在检查以确定用户是否是其成员。虽然u$
应该只有一个用户,但它仍然是一个拥有一个成员的集合。将其封装到ForEach-Object
并构建Associators
查询。执行查询并返回所有组标题(domain \ groupname)。由于$memberof
是一个数组,我们可以使用-contains
来查看您要查找的组是否存在。
<强>替代地强>
如果您有权访问AD cmdlet并运行以下
,则可以使用它(Get-ADUser $user -Properties memberof | Select-Object -ExpandProperty memberof) -contains (Get-ADGroup -Identity $group)
上述内容将返回True
或False
。您可以使用import-module activedirectory
继续测试
OpenLDAP应该从我收集的内容中支持这一点,它比之前的WMI快得多。
$search = [adsisearcher]"(&(objectcategory=user)(Name=userFullName))"
$userLDAP = $search.FindOne().Path
$userMembers = ([ADSI]$userLDAP).memberof
$search = [adsisearcher]"(&(objectcategory=group)(Name=groupname))"
$group = ($search.FindOne().Path) -replace "LDAP://"
$userMembers -contains $group
很抱歉,因为我无法访问OpenLDAP进行测试。搜索用户并将MemberOf设为$userMembers
。然后将该组加入$group
。需要从字符串中删除LDAP前缀。然后再做一次-Contains
。