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

请求优化PowerShell脚本:发送含AD用户组及用户信息的HTML邮件

优化后的PowerShell脚本
# 循环获取并验证AD用户名
do {
    $UserName = (Read-Host "请输入用户名").Trim()
    $adUser = Get-ADUser -Filter "SamAccountName -eq '$UserName'" -Properties Name, Title, Manager, EmailAddress -ErrorAction SilentlyContinue
    
    if (-not $adUser) {
        Write-Host "错误:未找到用户 '$UserName',请重新输入。" -ForegroundColor Red
    } elseif (-not $adUser.EmailAddress) {
        Write-Host "错误:用户 '$UserName' 未配置邮箱,请重新输入。" -ForegroundColor Red
    }
} while (-not $adUser -or -not $adUser.EmailAddress)

# 循环获取并验证经理信息(支持输入samaccountname或邮箱)
do {
    $ManagerInput = (Read-Host "请输入经理的用户名或邮箱").Trim()
    # 尝试通过samaccountname查找
    $manager = Get-ADUser -Filter "SamAccountName -eq '$ManagerInput'" -Properties EmailAddress, Name -ErrorAction SilentlyContinue
    # 如果没找到,尝试通过邮箱查找
    if (-not $manager) {
        $manager = Get-ADUser -Filter "EmailAddress -eq '$ManagerInput'" -Properties EmailAddress, Name -ErrorAction SilentlyContinue
    }
    
    if (-not $manager) {
        Write-Host "错误:未找到经理 '$ManagerInput',请重新输入。" -ForegroundColor Red
    } elseif (-not $manager.EmailAddress) {
        Write-Host "错误:经理 '$($manager.Name)' 未配置邮箱,请重新输入。" -ForegroundColor Red
    }
} while (-not $manager -or -not $manager.EmailAddress)
$EmailSuperior = $manager.EmailAddress

# 定义HTML样式
$style = @"
<style>
BODY{font-family: Arial; font-size: 10pt;}
TABLE{border: 1px solid black; border-collapse: collapse; margin: 10px 0;}
TH{border: 1px solid black; background: #dddddd; padding: 5px; }
TD{border: 1px solid black; padding: 5px; }
.user-info {margin-bottom: 15px;}
</style>
"@

# 获取用户所属AD组并生成表格
$groupsTable = Get-ADPrincipalGroupMembership -Identity $adUser | 
               Get-ADGroup -Properties Description | 
               Select-Object Name, Description | 
               Sort-Object Name | 
               ConvertTo-Html -Head $style -PreContent "<h3>用户所属AD组</h3>"

# 构建邮件内容,包含用户全名和职位
$Body = @"
Hello,<br>
<br>
请确认以下用户的AD组权限是否需要保留或调整:<br>
<br>
<div class='user-info'>
<strong>用户全名:</strong>$($adUser.Name)<br>
<strong>职位:</strong>$($adUser.Title)<br>
</div>

$groupsTable
<br>
"@

# 发送邮件
$SmtpServer = 'mail.contoso.com'
$FromSender = 'no-reply@contoso.com'
$Subject = "权限审核:$($adUser.Name) ($UserName)"

Send-MailMessage -SmtpServer $SmtpServer `
                 -From $FromSender `
                 -To $EmailSuperior `
                 -Bcc $FromSender `
                 -Subject $Subject `
                 -Encoding UTF8 `
                 -Body $Body `
                 -BodyAsHtml

关键修改说明

1. 添加用户全名和职位到邮件内容

  • 在邮件正文顶部新增用户基本信息模块,清晰展示用户的全名和职位
  • 优化HTML样式,给用户信息模块添加专属类名,便于后续样式调整
  • 更新邮件主题,加入用户全名,提升主题辨识度

2. 新增用户及经理邮箱验证与重试逻辑

  • 用户验证:循环读取用户名,直到找到存在且配置了邮箱的AD用户
  • 经理验证:支持输入经理的samaccountname或邮箱地址,自动匹配AD对象,循环验证直到找到有效且带邮箱的经理账号
  • 用红色字体高亮错误提示,提升可读性

其他细节优化

  • 使用Here-String定义HTML样式和邮件正文,代码结构更清晰易维护
  • 移除不必要的Properties *,仅获取所需AD组属性(Description),提升执行效率
  • 给组表格添加标题,增强邮件内容的层次感

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:05:26