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

PowerShell中New-TimeSpan cmdlet迁移新服务器后报错求解决

AD密码过期脚本New-TimeSpan错误解决办法

问题根源

错误提示很明确:New-TimeSpan的-End参数需要DateTime类型的值,但你的$Expireson是一个TimeSpan类型(值为60.00:00:00,也就是60天的时间跨度),类型不匹配导致参数绑定失败。

这种情况大概率是脚本里错误地把域的MaxPasswordAge(密码最长有效期,本身是TimeSpan类型)直接当成了用户的密码过期时间,而正确的过期时间应该是用户最后改密码的时间(LastPasswordSet) + 域密码最长有效期,得到的是一个具体的DateTime值。

修正步骤

  1. 替换错误的$Expireson赋值逻辑
    找到脚本里给$Expireson赋值的代码,替换成正确的计算方式:

    # 先获取当前域的密码最长有效期
    $maxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
    
    # 遍历AD用户时,逐个计算密码过期时间
    foreach ($user in Get-ADUser -Filter * -Properties LastPasswordSet, PasswordNeverExpires) {
        # 跳过密码永不过期的用户
        if ($user.PasswordNeverExpires) { continue }
        # 跳过未设置过密码的用户(LastPasswordSet为空)
        if (-not $user.LastPasswordSet) { continue }
    
        # 计算正确的过期日期(DateTime类型)
        $Expireson = $user.LastPasswordSet + $maxPasswordAge
        $today = Get-Date
    
        # 计算剩余过期天数
        $timeSpan = New-TimeSpan -Start $today -End $Expireson
        $daystoexpire = $timeSpan.Days
    
        # 后续通知逻辑示例
        if ($daystoexpire -le 7) {
            Write-Host "提醒:用户 $($user.Name) 的密码还有 $daystoexpire 天过期"
        } elseif ($daystoexpire -lt 0) {
            Write-Host "警告:用户 $($user.Name) 的密码已过期 $(-$daystoexpire) 天"
        }
    }
    
  2. 处理边缘场景

    • 跳过PasswordNeverExpires为$true的用户,避免无效计算
    • 跳过LastPasswordSet为空的用户(比如新创建未设置密码的账号)
    • 单独处理$daystoexpire为负数的情况(密码已过期)
  3. 验证变量类型
    可以在脚本中临时添加一行输出,确认$Expireson的类型是否正确:

    Write-Host "Expireson类型:$($Expireson.GetType().Name),值:$Expireson"
    

    正常输出应该是Expireson类型:DateTime,值:2024-XX-XX XX:XX:XX

常见错误排查

  • 不要直接把MaxPasswordAge赋值给$Expireson,它是时间跨度而非具体日期
  • 确保Get-ADUser命令通过-Properties指定了LastPasswordSet属性(默认不会返回该属性)
  • 多域环境下,确认Get-ADDefaultDomainPasswordPolicy获取的是目标域的密码策略

内容的提问来源于stack exchange,提问作者jackusflackus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:56:26