我有以下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
答案 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
为空。)