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

如何使用PowerShell比较两个文本文件并在不同时发送差异邮件?

我来帮你完善这个PowerShell脚本,实现文件内容对比并在存在差异时自动发送邮件的功能。先给你完整的可运行版本,再一步步拆解关键细节:

完整实现脚本
# 1. 定义要对比的两个文件路径(请替换成你的实际路径)
$filePath1 = "C:\Data\FileA.txt"
$filePath2 = "C:\Data\FileB.txt"

# 2. 对比两个文件内容,获取差异结果
$diffResult = Compare-Object -ReferenceObject (Get-Content $filePath1) `
                             -DifferenceObject (Get-Content $filePath2) `
                             -IncludeEqual

# 3. 判断是否存在内容差异
if ($diffResult.Where({$_.SideIndicator -ne '=='})) {
    # 4. 把差异格式化成易读的文本
    $diffContent = $diffResult | ForEach-Object {
        switch ($_.SideIndicator) {
            '<=' { "🔹 仅文件1存在: $($_.InputObject)" }
            '=>' { "🔹 仅文件2存在: $($_.InputObject)" }
            # '==' { "✅ 两边都存在: $($_.InputObject)" } # 不需要显示相同内容可注释掉这行
        }
    } | Out-String

    # 5. 邮件配置参数
    $fromAddress = "noreply@xy.com"
    $toAddress = "me@xy.com"
    $subject = "⚠️ 文本文件内容存在差异提醒"
    $smtpServer = "smtp.office.com"
    $smtpPort = 587 # Office 365 SMTP默认端口
    $login = "abc"
    $password = "12345" | ConvertTo-SecureString -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential($login, $password)

    # 6. 创建并发送邮件
    $message = New-Object System.Net.Mail.MailMessage($fromAddress, $toAddress)
    $message.Subject = $subject
    $message.Body = @"
以下是两个文件的差异详情:

$diffContent

---
文件1路径: $filePath1
文件2路径: $filePath2
"@
    $message.IsBodyHtml = $false # 若要HTML格式可改为true,同时调整Body内容

    $smtpClient = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort)
    $smtpClient.EnableSsl = $true # Office 365必须启用SSL
    $smtpClient.Credentials = $credential

    try {
        $smtpClient.Send($message)
        Write-Host "差异提醒邮件已成功发送"
    }
    catch {
        Write-Error "发送邮件失败: $_"
    }
}
else {
    Write-Host "两个文件内容完全一致,无需发送邮件"
}

关键细节说明

  • 文件对比逻辑:用Compare-Object cmdlet实现核心对比,SideIndicator字段用来区分内容归属:<=是基准文件(文件1)独有的内容,=>是对比文件(文件2)独有的内容,==是两边都存在的内容。
  • 邮件适配Office 365:Office 365的SMTP服务器固定为smtp.office.com,端口587,必须开启SSL加密。如果你的账号启用了多因素认证(MFA),不能用普通密码,需要在微软账户后台创建应用专用密码来替换。
  • 异常处理:加入try-catch块捕获邮件发送时的错误,方便你排查权限、网络等问题。

实用优化建议

  1. 若要处理大文件,可以把Get-Content换成Get-Content -ReadCount 0来提升读取效率。
  2. 想要更醒目的邮件格式,可以把IsBodyHtml设为true,用HTML标签给差异内容加上颜色(比如红色标注独有内容)。
  3. 可以添加日志记录,把对比结果和邮件发送状态写入日志文件,方便后续追溯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:45:12