You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Active Directory中账户的实际过期日期?

解决Active Directory过期账户日期显示多一天的问题

问题原因

Active Directory存储账户过期日期时,会将设置的过期日期次日00:00:00作为实际过期时间点。比如你设置用户11月15日过期,AD实际存储的是11月16日00:00,这意味着用户在15日当天仍可正常登录,次日才会被限制登录。这就是PowerShell查询返回的日期比实际设置多一天的核心原因。

修正后的PowerShell代码

方式一:显示实际过期日期并准确过滤已过期账户

Get-ADUser -Filter * -Properties AccountExpirationDate |
Where-Object {
    $_.AccountExpirationDate -ne $null -and 
    $_.Enabled -eq $True -and
    # 转换为实际过期日期后,判断是否早于当前日期
    $_.AccountExpirationDate.AddDays(-1).Date -lt (Get-Date).Date
} |
Select-Object Name, SamAccountName, 
    # 新增计算属性,返回实际设置的过期日期(去掉时间部分)
    @{Name='ActualExpirationDate'; Expression={$_.AccountExpirationDate.AddDays(-1).Date}} |
Sort-Object -Property ActualExpirationDate -Descending

方式二:优化查询效率(服务器端过滤)

将部分过滤逻辑放在Get-ADUser的Filter参数中,减少本地处理的数据量,提升查询速度:

Get-ADUser -Filter {Enabled -eq $True -and AccountExpirationDate -ne $null} -Properties AccountExpirationDate |
Where-Object { $_.AccountExpirationDate.AddDays(-1).Date -lt (Get-Date).Date } |
Select-Object Name, SamAccountName, 
    @{Name='ActualExpirationDate'; Expression={$_.AccountExpirationDate.AddDays(-1).Date}} |
Sort-Object -Property ActualExpirationDate -Descending

关键说明

  • 使用AddDays(-1)将AD存储的时间转换为实际设置的过期日期,.Date用于去除时间部分,确保日期对比的准确性。
  • 过滤时必须用转换后的实际日期与当前日期的日期部分对比,避免因当前时间(比如下午)与AD存储的次日零点时间对比导致的误判。

内容的提问来源于stack exchange,提问作者ak2595

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:10:23