如何为跨域Get-ADUser命令添加筛选获取用户密码过期日期
获取AD用户密码过期日期的方法
嗨,既然你已经能成功跨域执行Get-ADUser命令了,那添加密码过期日期的获取其实很简单——只需要指定对应的AD属性并做一点格式转换就行,因为这个属性默认不会被返回。
基础命令:获取单个用户的密码过期日期
直接在你的原有命令上加上-Properties参数指定计算属性,再转换时间格式:
Get-ADUser "username" -Server "abc.com" -Properties msDS-UserPasswordExpiryTimeComputed | Select-Object Name, SamAccountName, @{Name="PasswordExpiryDate"; Expression={ # 把AD返回的文件时间戳转成可读日期 [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}
关键细节解释
msDS-UserPasswordExpiryTimeComputed:这是AD的计算属性,它会自动计算用户密码的过期时间,不需要你手动结合密码策略和上次修改时间来推算。- 时间转换:这个属性返回的是Windows文件时间格式(从1601年开始的计时),所以必须用
[datetime]::FromFileTime()转换成人类能看懂的日期时间。
进阶:处理“密码永不过期”的情况
如果用户的密码被设置为永不过期,msDS-UserPasswordExpiryTimeComputed会返回0,转换后会显示成1601年1月1日,我们可以在命令里加个判断优化输出:
Get-ADUser "username" -Server "abc.com" -Properties msDS-UserPasswordExpiryTimeComputed | Select-Object Name, SamAccountName, @{Name="PasswordExpiryDate"; Expression={ if ($_."msDS-UserPasswordExpiryTimeComputed" -eq 0) { "Never Expires" } else { [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") } }}
扩展:筛选即将过期的用户
如果你想批量筛选出一段时间内密码要过期的用户(比如7天内),可以用-Filter参数:
Get-ADUser -Filter {msDS-UserPasswordExpiryTimeComputed -lt [datetime]::Now.AddDays(7)} -Server "abc.com" -Properties msDS-UserPasswordExpiryTimeComputed | Select-Object Name, SamAccountName, @{Name="PasswordExpiryDate"; Expression={ if ($_."msDS-UserPasswordExpiryTimeComputed" -eq 0) { "Never Expires" } else { [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") } }}
内容的提问来源于stack exchange,提问作者Mohammed Naveed
相关产品推荐
相关产品推荐

