请求优化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
相关产品推荐
相关产品推荐

