You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:01:13