如何用PowerShell筛选AD中密码5天后过期的用户并导出CSV
筛选AD中5天后密码过期的用户并导出CSV
我帮你调整了PowerShell代码,实现筛选出5天后密码过期的AD用户并导出CSV,两种方案供你选择,优先推荐第一种(效率更高):
方案一:AD服务器端筛选(推荐)
这种方式直接在AD服务器上完成筛选,只拉取符合条件的用户数据,适合用户量较大的AD环境:
# 计算5天后的日期(取当天午夜,避免时间部分干扰) $fiveDaysFromNow = (Get-Date).AddDays(5).Date # 转换为AD识别的FileTime格式 $expiryCutoff = $fiveDaysFromNow.ToFileTime() # 获取密码5天内过期的用户并导出CSV Get-ADUser -Filter "msDS-UserPasswordExpiryTimeComputed -le $expiryCutoff -and msDS-UserPasswordExpiryTimeComputed -gt 0" ` -Properties DisplayName, EmailAddress, msDS-UserPasswordExpiryTimeComputed | Select-Object DisplayName, EmailAddress, @{Name="Expiration Date"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} | Export-Csv -Path c:\support\PasswordExpiration.csv -Encoding ASCII -NoTypeInformation
关键说明:
$fiveDaysFromNow = (Get-Date).AddDays(5).Date:取当前日期加5天的午夜零点,确保我们筛选的是5天内(含第5天当天)密码过期的用户,不会因为当前时间(比如下午2点)导致漏选当天过期的用户。msDS-UserPasswordExpiryTimeComputed -gt 0:排除密码设置为永不过期的用户(这类用户的该属性值为0)。- 用AD原生Filter筛选,比拉取所有用户后本地过滤速度快很多。
方案二:本地客户端筛选
如果AD环境用户量不大,也可以先拉取所有用户数据,再在本地筛选:
Get-ADUser -Filter * -Properties DisplayName, EmailAddress, msDS-UserPasswordExpiryTimeComputed | Where-Object { # 排除永不过期的用户,同时筛选5天内过期的 $_.msDS-UserPasswordExpiryTimeComputed -gt 0 -and [datetime]::FromFileTime($_.msDS-UserPasswordExpiryTimeComputed) -le (Get-Date).AddDays(5).Date } | Select-Object DisplayName, EmailAddress, @{Name="Expiration Date"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} | Export-Csv -Path c:\support\PasswordExpiration.csv -Encoding ASCII -NoTypeInformation
注意事项:
- 两种方案都保留了你原来的导出格式,确保CSV里的
Expiration Date是易读的日期格式。 - 运行前请确认你有AD模块的权限,并且目标路径
c:\support\存在(如果不存在可以先创建:New-Item -Path c:\support -ItemType Directory -Force)。
内容的提问来源于stack exchange,提问作者Listor
相关产品推荐
相关产品推荐

