PowerShell脚本:如何将AD中匹配的密码过期日期存入变量
解决方法
要将匹配的用户(或对应的过期日期)存入变量,你可以直接通过筛选AD用户对象来实现,同时建议用日期对象而非字符串进行比较,避免格式匹配的问题。具体修改如下:
步骤1:定义目标日期(用DateTime对象)
先把"当前日期+4天"处理为仅保留日期部分的DateTime对象,避免时间干扰:
$targetDate = (Get-Date).AddDays(4).Date
步骤2:筛选匹配的用户并存入变量
使用Where-Object过滤出密码过期日期等于目标日期的用户,结果直接存入变量:
# 筛选出符合条件的用户对象,包含所有你需要的属性 $matchingUsers = $Users | Where-Object { $_.PasswordExpiry.Date -eq $targetDate }
如果只需要提取匹配的日期(虽然这里所有匹配项的日期都是$targetDate),可以直接取属性:
$matchingDates = $matchingUsers.PasswordExpiry
完整修改后的代码示例
$Users = Get-ADUser @QueryParameters | Select-Object -Property $SelectionProperties # 定义目标日期(当前日期+4天,仅保留日期部分) $targetDate = (Get-Date).AddDays(4).Date # 筛选匹配的用户 $matchingUsers = $Users | Where-Object { $_.PasswordExpiry.Date -eq $targetDate } # 判断是否存在匹配项并处理 if ($matchingUsers.Count -gt 0) { Write-Host "存在密码将在4天后过期的用户" # 可以输出匹配的用户信息 $matchingUsers | Format-Table Name, PasswordExpiry -AutoSize }
关键说明
- 用
Where-Object替代-contains,既能判断存在性,又能直接获取符合条件的完整用户对象,后续可以直接用这些对象的属性(比如邮箱、用户名)发送通知。 - 使用
DateTime.Date属性比较,避免因为PasswordExpiry包含时间戳(比如2024/05/20 14:30:00)而和字符串格式的日期(20/05/2024)匹配失败的问题。
内容的提问来源于stack exchange,提问作者DonTxm
相关产品推荐
相关产品推荐

