我想询问用户他是否属于该组,这里的问题是......有时很难确定它是否属于它的一部分,因为他可能处于组子组的多个级别。
示例,如果我想检查用户是否在“所有销售用户”中。 他可以在“所有销售用户”的子组中> “销售美国”> “销售SJ”> “Prod A”> “项目B”
问题是,我必须打开所有搜索他的子组。我怎么知道他是否是“所有销售用户”的一部分?如果查询可以显示层次结构,则为最佳。我尝试了PowerShell,但它只显示了成员。不知道如何帮助解决这个问题。
答案 0 :(得分:0)
递归Powershell实现,假设您安装了ActiveDirectory Powershell模块。它将为用户所属的所有组返回Common Name,包括嵌套,因此在您的示例中将返回所有5个组。
function findGroup($n){
$g = Get-ADGroup $n;
$parents = Get-ADGroup -Filter {Members -eq $g.DistinguishedName}
if($parents -eq $null){
return $g.Name;
}
else{
$g.Name;
$parents | % { findGroup $_ }
}
}
利用第一个功能的第二个功能:
function findUsersGroup($userName){
$u = (Get-ADUser $userName -Properties memberof).memberof
$u | % { findGroup $_}
}
因此,如果您将上述2个功能粘贴到您的PowerShell窗口中,则可以运行
PS C:\> findUsersGroup raf
这将返回用户所属的组列表,包括层次结构:
insideinsidetopgroup
insidetopgroup
topgroup
othergroup
答案 1 :(得分:0)
您可以尝试LDAP with Powershell
$strFilter = "(&(memberOf:1.2.840.113556.1.4.1941:={0})(objectCategory=person)(objectClass=user)(sAMAccountName={1}))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
{$objItem = $objResult.Properties; $objItem.name}
{0}
是嵌套组,应该是专有名称
{1}
是您想要的用户 sAMAccountName (您可以在(sAMAccountName={1})
中使用除sAMAccountName之外的任何其他用户属性)