为何Get-ADUser用whenCreated过滤无结果,用Created属性却正常?
差异原因说明
whenCreated是AD目录服务底层的原生LDAP属性,存储格式为UTC标准的广义时间字符串,AD PowerShell模块处理该属性的过滤时,不会自动对输入的本地时间字符串做时区转换和格式适配,你直接传入"11.05.2021 15:00:00"的本地时间字符串和AD里存储的UTC格式时间完全不匹配,因此无返回结果。Created是AD PowerShell模块封装的扩展计算属性,模块会自动把底层whenCreated的UTC时间转换为本地时区的DateTime类型对象再对外暴露,过滤时你输入的时间字符串会被PowerShell自动解析为本地DateTime对象,只要时间值匹配就能正常返回结果。
如果你需要用whenCreated属性完成过滤,可参考以下两种正确写法:
- 先将目标时间转换为UTC时间再匹配:
$targetTime = [DateTime]"11.05.2021 15:00:00" Get-ADUser -filter {whenCreated -eq $targetTime.ToUniversalTime()} -properties whenCreated
- 直接使用LDAP过滤器,传入符合要求的广义时间格式:
# 示例时间为东八区15点,对应UTC时间12点,格式为yyyyMMddHHmmss.0Z Get-ADUser -LDAPFilter "(whenCreated=20210511120000.0Z)" -properties whenCreated
内容的提问来源于stack exchange,提问作者Purclot
相关产品推荐
相关产品推荐

