Powershell - Active Directory - 今天过滤PasswordLastSet

时间:2016-05-06 14:22:43

标签: powershell active-directory

我有以下powershell它没有过滤器。但是,如果我想查看passwordlastset是否为今天它会抛出错误。我想比较日期(没有时间)。

此行引发错误:

Get-ADUser -identity svc-sap-dataRead -ldapfilter passwordlastset=get-date -properties passwordlastset

Get-ADUser -identity svc-sap-dataRead -properties passwordlastset

DistinguishedName : CN=svc-sap-dataRead,OU=Service Accounts,OU=SAP-
                    OG,OU=Applications,OU=Prod-Groups,DC=csi,DC=com
Enabled           : True
GivenName         :
Name              : svc-sap-dataRead
ObjectClass       : user
ObjectGUID        : dcbadba0-3cd7-4e51-9d14-d0e8a6be17f5
PasswordLastSet   : 5/6/2016 8:44:13 AM
SamAccountName    : svc-sap-dataRead
SID               : S-1-5-21-3791487480-1111548175-1301309645-519760
Surname           :
UserPrincipalName : svc-sap-dataRead@csi.com

刚试过以下代码:它没有错误,也没有给我任何回复。

Get-ADUser -identity svc-sap-dataRead -properties passwordlastset |
where {$_.passwordlastset -eq (get-date)}|select-object passwordlastset, name

1 个答案:

答案 0 :(得分:2)

您正在比较完整的DateTime,而不仅仅是当天。换句话说,你要比较到分钟。把它放在where块中:

$pw = $_.passwordLastset;
$pw.ToShortDateString() -eq $(Get-Date).ToShortDateString()

编辑:这是完整的命令:

Get-ADUser -Identity svc-sap-dataRead -Properties passwordLastSet | Where-Object {
    $pw = $_.passwordLastSet
    if ($pw -ne $null) {
        $pw.ToShortDateString() -eq (Get-Date).ToShortDateString()
    }
} | Select-Object passwordLastSet, Name

您的Where-Object将过滤掉不符合该块条件的用户,在这种情况下,是尚未重置密码的用户。

如果您只想要一个布尔值,表明他们今天是否重置了密码,您可以尝试这样的事情:

$adUser = Get-ADUser -Identity svc-sap-dataRead -Properties passwordLastSet | Select-Object passwordLastSet, Name
$pw = $adUser.passwordLastSet
$resetPasswordToday = if ($pw -ne $null) { $pw.ToShortDateString() -eq (Get-Date).ToShortDateString() } else { $false }

这是获取passwordLastSet属性,看它是否为null,如果没有看到它的日期是否为今天。
(请记住,如果通过选中“用户必须更改密码”框手动使密码失效,这实际上会使passwordLastSet为空。)