我想使用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-Name
:
http://datapigtechnologies.com/blog/index.php/pull-your-global-address-book-into-excel/
所以我希望通过通配符搜索AD属性名称本身,以便在 AD用户层次结构中的任何属性名称中的任何位置存在单词“office”,并且搜索结果返回physicalDelivery Office 名称作为结果,包括它位于 organizationalPerson
内的事实(希望这会使问题更清楚一点?)
答案 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