【问题标题】:How to find AD users where no password is set?如何找到没有设置密码的AD用户?
【发布时间】:2018-07-25 12:37:01
【问题描述】:

如何找到未设置密码的AD用户?

一些背景资料:

我们有一个脚本(用 C# 编写)创建 AD 用户并设置默认密码。首次尝试登录时,系统会提示用户更改此密码。

脚本运行良好,但最近我们发现在少数情况下没有设置密码。它时不时地发生。我们目前正在调查这个问题。

现在我不想找到脚本没有设置默认密码的用户,以便在需要的地方手动设置默认密码。

当我查看用户的 AD 属性时,我看不到在没有设置(默认)密码的情况下找到这些用户的明显方法。

当用户从脚本创建并且密码设置成功(测试)时,pwdLastSet 为 0x0。那么如何知道什么时候没有设置密码呢?

【问题讨论】:

  • 嗯,我的第一个猜测是检查是否有任何停用的帐户?由于 Passwort-Requirements 未完成,因此应禁用帐户。

标签: powershell active-directory


【解决方案1】:

你追求的是Get-ADReplicationAttributeMetadata

试一试,您应该可以根据需要设置它。它相当快,因此您可以将结果添加到哈希表并在完成后将其抽出。 我用$Username$ServerName 作为params 将这个注入了一个不错的小功能。

你追求的主要属性是pwdLastSetntPwdHistorylastLogonTimestamp

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

【讨论】:

  • 不错,无版本的ntPwdHistory 可能是这里最好的指标
  • 感谢您的回复。但似乎 Get-ADReplicationAttributeMetadata 对我不可用。当我尝试这个时,我得到的结果是无法识别。
  • 为您检查了版本兼容性。
  • 谢谢,在我的电脑上做了版本检查,我正在运行版本 4。>get-host|Select-Object version Version ------- 4.0
【解决方案2】:

PasswordLastSet 属性可以做到这一点。它保存上次设置密码的日期。

Get-ADUser -Filter * -Properties PasswordLastSet | Where-Object { $_.PasswordLastSet -eq $null } 

【讨论】:

  • 这个问题是passwordlastset如果没有密码并且首次登录时需要设置新密码,将返回0。
  • ActiveDirectory 日期是数字,必须进行转换才能获得日期时间值。这主要是自动发生的,但有时可能会很痛苦。在这种情况下,它可以为您工作。您可以将属性作为数字获取,然后只需检查它是否 whenCreated 属性,这也是您可以作为数字检索的日期。
  • 我在这里发布我的问题之前已经尝试过了。正如马修回应的那样,它并没有告诉我我想知道什么。无论如何,感谢您提供帮助。
【解决方案3】:

尽管激活了密码策略,但在 AD 中可能会有用户使用空白密码。这是由于用户的userAccountControl 属性中的PASSWD_NOTREQD 标志。此 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多