如何将PowerShell URL状态查询输出转为表格并适配邮件展示
解决方案
1. 生成结构化数据并输出HTML表格
要解决纯文本输出杂乱的问题,核心是先生成结构化对象,再将其转换为HTML格式的表格——HTML表格在邮件客户端中能保持规整的排版,不会出现错位。
修改后的PowerShell脚本示例:
# 读取URL列表 $urls = Get-Content -Path "C:\temp\link.txt" # 存储检测结果的数组 $results = @() foreach ($url in $urls) { try { # 发送HEAD请求获取状态码 $response = Invoke-WebRequest -Uri $url -Method Head -ErrorAction Stop $statusCode = $response.StatusCode } catch { # 捕获请求失败的情况,记录错误状态 $statusCode = $_.Exception.Response.StatusCode.value__ if (-not $statusCode) { $statusCode = "请求失败(无法连接)" } } # 将结果添加为自定义对象 $results += [PSCustomObject]@{ URL = $url HTTP状态码 = $statusCode } } # 转换为HTML表格片段 $htmlTable = $results | ConvertTo-Html -Property URL, "HTTP状态码" -Fragment | Out-String # 添加基础CSS样式优化表格显示(可选,让表格更美观规整) $styledHtml = @" <style> table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } </style> $htmlTable "@
2. 发送带规整表格的邮件
使用Send-MailMessage时,必须指定-BodyAsHtml $true,确保邮箱客户端解析HTML内容,展示规整的表格:
# 发送邮件示例 Send-MailMessage -From "sender@example.com" ` -To "recipient@example.com" ` -Subject "URL状态检测报告" ` -Body $styledHtml ` -BodyAsHtml $true ` -SmtpServer "smtp.example.com"
关键说明
- 纯文本表格的问题:不同邮件客户端对纯文本的缩进、换行处理逻辑不一致,极易出现列错位;HTML是标准网页格式,所有主流邮箱都能正确解析。
- 自定义对象的优势:结构化数据方便后续转换为任何格式(HTML、CSV等),比拼接字符串更灵活、易维护。
内容的提问来源于stack exchange,提问作者Mil
相关产品推荐
相关产品推荐

