[玩转系统] AD用户密码即将过期时的密码修改通知
作者:精品下载站 日期:2024-12-14 22:54:59 浏览:13 分类:玩电脑
AD用户密码即将过期时的密码修改通知
在本文中,我们将展示如何使用 PowerShell 查找 Active Directory 用户帐户的密码何时过期,如何将密码设置为永不过期(
PasswordNeverExpires = True
),并提前通知用户修改密码。
如果域中的用户密码过期,该帐户不会被锁定,但无法使用该帐户访问域资源,直到用户将过期密码更改为新密码。最常见的是,远程用户会遇到密码过期的问题,因为他们无法使用标准工具更改密码。
AD 域密码策略中设置了域中的用户密码到期时间限制、必须更改的频率(密码最长期限)和复杂性要求。这些参数在默认域策略或细粒度密码策略中设置。
您可以使用以下 PowerShell 命令获取域中当前的密码过期策略设置:
Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge
在我们的示例中,域中用户密码的最长期限为 60 天。
如何获取 Active Directory 中的用户密码到期日期?
您可以使用 Net user 命令在命令提示符中查看密码期限和上次更改密码的日期:
net user jsmith /domain
您可以在以下几行中找到您需要的信息:
最后设置的密码 — 9/9/2020 9:23:59 AM
密码过期 - 2021 年 1 月 7 日上午 9:23:59
密码可更改 — 9/10/2020 9:23:59 AM
您可以获取任何用户的密码到期日期。为此,您不需要具有用户帐户的 AD 容器的管理员权限或委派权限。
要查看 AD 帐户的设置,我们将使用特殊的 PowerShell for Active Directory 模块,该模块允许您获取不同 AD 对象属性的值(请参阅如何在 Windows 10 和 Windows Server 2012 R2/2016 中安装和导入 AD PowerShell 模块)。
使用 Get-ADUser cmdlet,您可以查看上次更改用户密码的日期并检查是否设置了 PasswordNeverExpires 选项:
get-aduser jsmith -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired |ft Name, PasswordLastSet, PasswordNeverExpires,PasswordExpired
PasswordLastSet 是最后一次更改密码的日期和时间;
如果用户密码永不过期,PasswordNeverExpires 返回True;
PasswordExpired - 如果用户密码已过期,则返回True,如果密码未过期,则返回False。
您可以在图形 MMC 管理单元 Active Directory 用户和计算机 (
dsa.msc
)。为此,请打开用户属性,转到“属性编辑器”选项卡并检查 pwdLastSet 属性的值。
但正如您所看到的,MMC 管理单元仅显示密码更改的时间。目前尚不清楚密码何时到期。
要获取密码到期日期而不是上次更改时间,请使用特殊构造的 AD 属性:msDS-UserPasswordExpiryTimeCompulated。 msDS-UserPasswordExpiryTimeCompulated 值是根据上次密码更改的日期和域密码策略自动计算的。
UserPasswordExpiryTimeCompulated 参数返回时间戳格式的日期,因此我使用
FromFileTime
函数将其转换为人类可读的值:
Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}
这样,我们就得到了用户密码的过期日期。
如果 msDS-UserPasswordExpiryTimeCompulated 的值为 0,则表示 pwdLastSet 为空 (null) 或等于 0(密码从未更改过)。
要从 AD 中的特定容器 (OU) 获取所有用户的密码到期日期,您可以使用以下 PowerShell 脚本:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=a-d,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime ($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet
它会生成一个表格,其中包含活动用户列表、到期日期和上次密码更改的时间。
您只能显示密码过期的用户列表:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=a-d,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
foreach($user in $Users){
if( [datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date)) {
$user.Name
}
}
如何设置AD用户密码永不过期?
如果要为帐户设置永久密码,请检查 AD 中用户属性中的密码永不过期选项(它是 UserAccoutControl 属性的位值之一)。
或者您可以通过设置用户属性使用 PowerShell 启用此选项:
Get-ADUser jsmith | Set-ADUser -PasswordNeverExpires:$True
您可以为文本文件中的列表中的多个用户一次设置“密码永不过期”选项:
$users=Get-Content "C:\PS\users_password_never_expire.txt"
Foreach ($user in $users) {
Set-ADUser $user -PasswordNeverExpires:$True
}
您可以显示禁用常规密码更改选项的所有用户的列表:
Get-ADUser -filter * -properties Name, PasswordNeverExpires | where {$_.passwordNeverExpires -eq "true" } | Select-Object DistinguishedName,Name,Enabled |ft
Active Directory 密码过期通知策略
Windows 有一个特殊的组策略参数,可以通知用户必须更改密码。
该策略称为交互式登录:提示用户在过期前更改密码,位于 GPO 部分下:计算机配置 -> 策略 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项。
默认情况下,该策略在本地 Windows 设置上启用,并且通知会在密码过期前 5 天开始显示。您可以更改用户看到密码更改通知的天数。
启用此策略后,如果用户的密码过期,则每次用户登录时托盘中都会出现更改密码的通知。
Consider changing your password
Your password will expire in xx days.
您还可以使用一个简单的 PowerShell 脚本,该脚本会自动显示一个对话框窗口,并提示您更改密码(如果密码在 5 天内过期):
Add-Type -AssemblyName PresentationFramework
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt 5) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Your password expires in "+ $timediff + " days!`nDo you want to change it now?","Important!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
'No' { }
}
}
}
如果用户单击“是”,则会出现一个 Windows 安全窗口,您可以在按
Ctrl+Alt+Del
或者
Ctrl+Alt+End
(如果是 RDP/RDS 连接)。
该脚本意味着 PowerShell for AD 模块已安装在用户的计算机上。即使未安装 RSAT 也可以使用。查看文章“在不安装RSAT的情况下使用AD模块”。
启用 PS 脚本自动启动或将其作为 GPO 登录脚本运行。
通过 Powershell 发送密码过期电子邮件通知
如果您想通过电子邮件通知用户密码到期,可以使用以下 PowerShell 脚本:
$Sender = "[email protected]"
$Subject = 'Important! Your password expires soon!'
$BodyTxt1 = 'Your password for'
$BodyTxt2 = 'expires in '
$BodyTxt3 = 'days. Remember to change your password in advance. If you have other questions, contact the HelpDesk.'
$smtpserver ="smtp.a-d.site"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=a-d,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}
该脚本检查密码即将过期的所有活动域用户。在密码过期前 7 天,用户开始收到发送到 AD 中指定地址的电子邮件。电子邮件将一直发送,直至密码更改或过期。
管理员可以使用 Set-ADAccountPassword cmdlet 强制更改用户密码。
在域中的任何计算机/服务器上定期运行此 PowerShell 脚本(使用任务计划程序更容易执行)。当然,您必须将发送电子邮件的主机的 IP 地址添加到 SMTP 服务器上允许的发件人列表(无需身份验证即可发送电子邮件)。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag