如何找到未设置密码的AD用户?
一些背景信息:
我们有一个脚本(用C#编写),用于创建AD用户并设置默认密码。在首次尝试登录时提示用户更改此密码。
脚本运行正常,但是最近我们发现在某些情况下未设置密码。而且它不时发生。我们目前正在调查此问题。
现在,我将找不到脚本未设置默认密码的用户,以便在需要时手动设置默认密码。
当我查看用户的AD属性时,看不到找到没有设置(默认)密码的用户的明显方法。
通过脚本创建用户并且密码已成功设置(经过测试)时,pwdLastSet为0x0。那么如何知道何时未设置密码?
答案 0 :(得分:4)
您追求的是Get-ADReplicationAttributeMetadata
。
一劳永逸,您应该可以将其设置为所需的内容。它相当快,因此您可以将结果添加到哈希表中,并在完成后将其抽出。
我将其插入了一个不错的小功能,其中$Username
和$ServerName
为params
。
您要使用的主要属性是pwdLastSet
,ntPwdHistory
和lastLogonTimestamp
。
Get-ADuser $username |
Get-ADReplicationAttributeMetadata -Server $ServerName |
Where-Object Version -GT 1 | Select AttributeName, LastOriginatingChangeTime, Version | OGV
version
会告诉您更改了多少次,而LastOriginatingChangeTime
会告诉您何时更改。如果您执行Select *
并删除了Where-Object Version -GT 1
,则可以看到它提取的其他数据。
编辑: 看起来Get-ADReplicationAttributeMetadata在版本2上不可用。
PSVersion Get-ADReplicationAttributeMetadata
--------- ----------------------------------
2 False
3 True
4 True
5 True
答案 1 :(得分:1)
PasswordLastSet属性可以做到。保存上次设置密码的日期。
Get-ADUser -Filter * -Properties PasswordLastSet | Where-Object { $_.PasswordLastSet -eq $null }
答案 2 :(得分:0)
尽管激活了密码策略,但 IS 仍然可以使AD中的用户密码为空。这是由于用户的PASSWD_NOTREQD
属性中的userAccountControl
标志所致。此PASSWD_NOTREQD标志的值为32。
要检查具有此标志(因此不需要密码)的已启用用户,您可以
$noPwdRequired = Get-ADUser -LDAPFilter "(&(objectClass=user)(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=544))"
foreach($user in $noPwdRequired ){
Write-Host $user.sAMAccountName # or displayName or whatever you want to identify the user
}
通常,用户对象的默认值为512(NORMAL_ACCOUNT
)。使用PASSWD_NOTREQD
时,它们的值为544
使用值546查找也设置了此标志的禁用帐户。
您可以为所有发现的类似行为的用户更新此信息
$noPwdRequired = Get-ADUser -LDAPFilter "(&(objectClass=user)(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=544))"
foreach($user in $noPwdRequired ){
Set-ADAccountControl $user -PasswordNotRequired $false
}