如何在ActiveDirectory中找到* where *存储属性?

时间:2015-11-25 18:54:51

标签: powershell active-directory powerquery

我想使用Power Query提取员工姓名列表,包括用户名,电话号码,办公室号码等属性。

我发现了一篇文章,说明了如何做到这一点:
https://ga-dev-tools.appspot.com/query-explorer/

但是,我的问题是:如果我想返回一个我知道存在的属性,但我不知道它所在的Active Directory对象/表模型中的位置,那么如何执行搜索以查找特定表格&属性必须查询?

编辑 - 附加信息
“这更像是PowerShell问题的PowerQuery问题” - 我认为答案是肯定和否定。

此命令:

Get-ADUser <someValidUserName> - Property *  

...确实输出所有指定用户的属性。但是,据我所知,输出中没有指示每个属性所在的AD对象层次结构中的位置。

从上面链接的Power Query文章中,我们看到Active Directory的Power Query界面中提到了几个“表”。其中一个表是organizationalPerson,其中包含一个名为physicalDeliveryOfficeName的属性。似乎organizationalPerson“对象”的概念并不是Power Query独有的,因为它似乎对应于此处记录的Ldap-Display-Namehttp://datapigtechnologies.com/blog/index.php/pull-your-global-address-book-into-excel/

所以我希望通过通配符搜索AD属性名称本身,以便在 AD用户层次结构中的任何属性名称中的任何位置存在单词“office”,并且搜索结果返回physicalDelivery Office 名称作为结果,包括它位于 organizationalPerson

内的事实

(希望这会使问题更清楚一点?)

1 个答案:

答案 0 :(得分:1)

对于后代:这是一个Active Directory脚本(请参阅获取类属性),该脚本将列出指定classes的所有class attributes SamAccountName + #make a list of desired class attributes $Properties = @('DisplayName', 'SamAccountName', 'mail', 'otherMailbox') Get-ADUser -Filter * -SearchBase "dc=myDomain,dc=gov" -Properties $Properties | select $Properties 。然后,您可以从属性列表中运行以下内容以获取属性值

#Run on Win 7 machine with PS 4.0 against A.D. running on a Win 2008 R2 domain controller

cls

$attributeList = New-Object System.Collections.ArrayList
$attributeListItem = [ordered]@{} 

Import-Module ActiveDirectory

#Get an AD User and request objectClass
$aDObj = Get-ADUser "MyAccountName" -Properties objectClass

#get all class names 
$nextClass = $aDObj.ObjectClass

$allClasses = Do
{
    $currentClass = $nextClass
    $nextClass = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $nextClass} -properties subClassOf | Select-Object -ExpandProperty subClassOf
    $currentClass
}
While($currentClass -ne $nextClass)

#Get all attributes
$mandatoryAndOptionalAttributes = 'MayContain','MustContain','systemMayContain','systemMustContain'

ForEach ($class in $allClasses)
{

    $classInfo = Get-ADObject -SearchBase "$((Get-ADRootDSE).SchemaNamingContext)" -Filter {lDAPDisplayName -eq $class} -properties $mandatoryAndOptionalAttributes 

    ForEach ($mandatoryAndOptionalAttribute in $mandatoryAndOptionalAttributes)
    {

        foreach ($classAttribute in $classInfo.$mandatoryAndOptionalAttribute)
        {
            $attributeListItem."Mandatory/Optional Attribute" = $mandatoryAndOptionalAttribute
            $attributeListItem."Class" = $classInfo.Name
            $attributeListItem."Class Attribute" = $classAttribute
            $attributeList.add((New-Object PSObject -Property $attributeListItem)) | out-null
        }
    }
}

$attributeList | out-gridview -title ("All Class Attributes: " + $attributeList.count)

感谢:http://virot.eu/getting-all-possible-classes-attributes-for-a-ad-object/

获取类属性

customlswebservices