我遇到了使用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-ADObject
cmdlet 的大多数其他行为一样,我认为此行为扩展到大多数(如果不是全部)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
有多种类型的属性 -Default
、Extended
和Constructed
是这些属性的一些例子。
Default
属性在与特定类型的ADObject
匹配的所有ADObject
查询上返回(ADUser
有自己的一组默认属性,ADGroup
有自己的一组,等等)
默认情况下不返回Extended
属性,而是ADObject
上隐式可枚举的静态属性。
Constructed
属性不是静态属性,而是根据属于ADObject
的其他属性的值计算的。我找不到有关此的任何信息,但我想枚举所有Constructed
属性可能是一项昂贵的操作,因为值是计算的,因此需要通过Get-ADObject
cmdlet 的-Properties
参数显式请求。
这一切似乎都与ADObject
上的systemFlags
属性有关,这是设置属性类型的地方。根据我的测试,需要显式指定具有Constructed (4)
或Non-Replicated (2)
标志的属性才能从 RSAT cmdlet 返回。
来源
msDS-UserPasswordExpiryTimeComputed 文档
使用 LDAP 筛选器列出 ADObject 上的所有构造属性
确定属性类型
系统标志属性