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



我遇到了使用
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

这不仅仅是从显示中省略属性的情况,我需要显式声明msDS-UserPasswordExpiryTimeComputed属性,否则它根本不可用于生成的对象。

我已经知道在大多数情况下筛选Properties *不是一个好主意,但我很好奇为什么不枚举所有AD DS 属性,而这正是我要求 cmdlet 执行的操作。

这个问题是关于Get-ADUser但与Get-ADObjectcmdlet 的大多数其他行为一样,我认为此行为扩展到大多数(如果不是全部)cmdlet。

以下代码应返回 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

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

在做了一些研究之后,一个ADObject有多种类型的属性 -DefaultExtendedConstructed是这些属性的一些例子。

Default属性在与特定类型的ADObject匹配的所有ADObject查询上返回(ADUser有自己的一组默认属性,ADGroup有自己的一组,等等)

默认情况下不返回Extended属性,而是ADObject上隐式可枚举的静态属性。

Constructed属性不是静态属性,而是根据属于ADObject的其他属性的值计算的。我找不到有关此的任何信息,但我想枚举所有Constructed属性可能是一项昂贵的操作,因为值是计算的,因此需要通过Get-ADObjectcmdlet 的-Properties参数显式请求。

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

来源

msDS-UserPasswordExpiryTimeComputed 文档

使用 LDAP 筛选器列出 ADObject 上的所有构造属性

确定属性类型

系统标志属性

最新更新