在指定所有属性时,Get-ADUser不返回所有可能的AD属性

Ben*_*est 7 powershell active-directory

我遇到了一个使用时未枚举特定属性的情况Get-ADUser -Properties *.例如,以下代码不会列出msDS-UserPasswordExpiryTimeComputed属性,即使它存在,我可以将其指定为-Properties参数,让它返回,并可以处理它的值.

# Does not return msDS-UserPasswordExpiryTimeComputed
Get-ADUser username -Properties *

# This works to get the msDS-UserPasswordExpiryTimeComputed attribute returned
Get-ADUser username -Properties msDS-UserPasswordExpiryTimeComputed

# If I really want all properties and this one
# I have to specify it alongside *
Get-ADUser username -Properties *, msDS-UserPasswordExpiryTimeComputed
Run Code Online (Sandbox Code Playgroud)

这不仅仅是从显示中省略属性的情况,我需要显式地声明msDS-UserPasswordExpiryTimeComputed属性,否则它只是在结果对象上不可用.

我已经知道Properties *在大多数情况下过滤并不是一个好主意,但我很好奇为什么所有 AD DS属性都没有被枚举,这正是我要求cmdlet做的事情.

这个问题是在询问,Get-ADUser但与Get-ADObjectcmdlet的大多数其他行为一样,我认为这种行为会延伸到大多数(如果不是全部)这些行为.

Tob*_*byU 6

以下代码应返回 AD 用户的所有属性(ObjectClass=user 的所有属性):

$properties = Get-ADObject -SearchBase (Get-ADRootDSE).SchemanamingContext -Filter {name -eq "User"} -Properties MayContain,SystemMayContain |
  Select-Object @{name="Properties";expression={$_.maycontain+$_.systemmaycontain}} |
  Select-Object -ExpandProperty Properties

Get-ADUser -Identity username -Properties $properties | fl $properties
Run Code Online (Sandbox Code Playgroud)

首先,它检索所有用户属性并将其保存到一个数组中,然后将该属性数组与 Get-ADUser 一起使用来检索单个用户的所有属性(在本例中)。


Ben*_*est 4

经过一些研究,ADObject- DefaultExtended、 和Constructed是其中的一些示例。

DefaultADObject属性在匹配特定类型的所有查询上返回ADObjectADUser有自己的一组默认属性,ADGroup有自己的一组等)

Extended默认情况下不返回属性,而是ADObject.

Constructed属性不是静态属性,而是根据属于 的其他属性的值计算的ADObject。我找不到这方面的任何信息,但我认为枚举所有Constructed属性可能是一项昂贵的操作,因为值是计算出来的,因此需要通过cmdlet的参数显请求。-PropertiesGet-ADObject

systemFlags这一切似乎都与an 上的属性有关ADObject,这是设置属性类型的地方。根据我的测试,需要显式指定带有Constructed (4)Non-Replicated (2)标志的属性才能从 RSAT cmdlet 返回。

来源

msDS-UserPasswordExpiryTimeCompulated 文档

使用 LDAP 过滤器列出 ADObject 上的所有构造属性

确定属性类型

系统标志属性