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

如何在AD用户Manager字段为空时给自己发送邮件?

PowerShell AD账号到期通知脚本修改方案

针对你遇到的用户Manager字段为空时报错的问题,我们可以通过添加空值判断、修正原脚本语法错误的方式,实现无经理用户的通知邮件发送给自己的需求,以下是具体修改方案:

核心修改点

  • 修正原脚本中的拼写错误(如filer→Filter、bodayashtml→BodyAsHtml等)与语法疏漏(如未闭合的引号、递归调用脚本块问题)
  • 新增Manager字段为空的判断逻辑,将无经理的用户单独归类,发送邮件至指定的自己的邮箱
  • 优化邮件内容格式,区分经理通知和无经理用户的通知主题与内容

完整修正脚本

Import-Module ActiveDirectory

# 基础邮件配置,替换为你的邮箱与SMTP服务器
$mailProps = @{
    From       = "test@domainname.com"
    SmtpServer = "server.domain.com"
    BodyAsHtml = $true
}

# 账号到期时间范围:接下来X天内到期的用户,替换x为具体天数
$startDate = Get-Date
$endDate = $startDate.AddDays(7)

# 查询AD中到期时间在指定范围内的用户,包含Manager字段
$userQueryProps = @{
    Filter     = "AccountExpirationDate -gt '$startDate' -and AccountExpirationDate -lt '$endDate'"
    Properties = 'AccountExpirationDate', 'Manager'
}
$users = Get-ADUser @userQueryProps

# 将用户按Manager分组,空值Manager单独成组
$users | Group-Object Manager | ForEach-Object {
    # 确定收件邮箱:Manager为空时用自己的邮箱,否则取经理邮箱
    if ([string]::IsNullOrEmpty($_.Name)) {
        $recipientEmail = "your-own-email@domainname.com" # 替换为你的邮箱
        $emailSubject = "账号到期通知:无经理用户列表"
    } else {
        $managerEmail = (Get-ADUser $_.Name -Properties EmailAddress).EmailAddress
        $recipientEmail = $managerEmail
        $emailSubject = "账号到期通知:你的下属账号即将到期"
    }

    # 生成用户到期列表的HTML内容
    $userListHtml = "<ul>"
    foreach ($user in $_.Group) {
        $expiryDate = $user.AccountExpirationDate.ToString("yyyy-MM-dd HH:mm")
        $userListHtml += "<li>$($user.Name) 的账号将于 $expiryDate 到期</li>"
    }
    $userListHtml += "</ul>"

    # 组装完整邮件内容
    $mailBody = @"
    <h3>$emailSubject</h3>
    <p>以下是即将到期的账号信息:</p>
    $userListHtml
    <p>请及时处理相关账号续期事宜。</p>
"@

    # 发送邮件
    Send-MailMessage @mailProps -To $recipientEmail -Subject $emailSubject -Body $mailBody
}

关键逻辑说明

  1. 空Manager处理:通过[string]::IsNullOrEmpty($_.Name)判断分组后的Manager是否为空,为空时将收件人设置为自己的邮箱
  2. 语法修正:修复了原脚本中Filter拼写错误、From字段未闭合引号、BodyAsHtml拼写错误,以及原脚本中递归调用$bodyScriptBlock导致的无限循环问题
  3. HTML内容优化:因为原脚本设置了BodyAsHtml=$true,所以用HTML格式生成邮件内容,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:55:48