powershell - 如何在Power Shell中比较两个文本文件并将差异发送到电子邮件

标签 powershell

我有2个文本文件,其中包含SQL函数名称列表。我希望能够比较$ A和$ B中的列表。然后,我想要$ B中而不是$ A中的SQL函数名称的列表,即列表$ C作为电子邮件地址的附件发送。

这是我的代码:

   $A = "c:\ReferenceFunctions.txt"
   $B = "c:\GeneratedFunctions.txt"
   $C = "c:\FileWithDifferences.txt"


    $fromaddress = "noreply@xyz"
    $toaddress = "123@hhh"
    $bccaddress = "3333@nnn.com"
    $login = "yourlogin"
    $password = "password" | Convertto-SecureString -AsPlainText -Force
    $smtpserver = "gggg.com" 
    $smtp = new-object Net.Mail.SmtpClient($smtpserver, 800)
    $smtp.EnableSsl = $true
    $smtp.Credentials = New-Object System.Net.NetworkCredential($login, 
    $password);
    $body = "see attached "
    $Subject = "checking differences"
    $message = new-object System.Net.Mail.MailMessage
    $message.From = $fromaddress
    $message.To.Add($toaddress)
    #$message.CC.Add($CCaddress)
    $message.Bcc.Add($bccaddress)
    $message.IsBodyHtml = $True
    $message.Subject = $Subject

    $message.body = $body
    $message.Priority = [System.Net.Mail.MailPriority]::High

Compare-object (Get-Content $A) (Get-Content $B) | Out-File  $C

#Attach the eported file with differences
$attachment = $C
$attach = new-object Net.Mail.Attachment($attachment)
$message.Attachments.Add($attach)

IF (Compare-Object -ReferenceObject (Get-Content $A) -DifferenceObject (Get-Content $B)){


    $smtp.Send($message);
} 

变量$ A具有以下信息:
fn_StatementEndOfMonth                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
fn_Performance_Sql                                                                                                                                                                                     
fn_DailyReturns 

变量$ B具有以下信息:
fn_Performance_Sql                                                                                                                                                                                     
fn_DailyReturns 
fn_SQLPerfomance_Monitor

$ C然后应包含
fn_SQLPerfomance_Monitor

此代码的问题在于,它正在文件$ A和$ B中发送带有所有SQL函数名称的附件,而不是发送差异。我似乎无法弄清楚哪里出了问题。有谁能帮忙吗?一直试图弄清楚整天,但没有运气。

最佳答案

看来您实际上想做一个与比较对象完全相反的事情。要获得您在$ C中所需的确切信息(我不确定为什么'fn_StatementEndOfMonth'也不应存在),您可以执行以下操作:

$a = 'fn_StatementEndOfMonth
fn_Performance_Sql
fn_DailyReturns' -split '[\r\n]'

$b = 'fn_Performance_Sql
fn_DailyReturns
fn_SQLPerfomance_Monitor' -split '[\r\n]'

$c = $b | % { if($_ -notin $a){$_} }

$c

fn_SQLPerfomance_Monitor

关于powershell - 如何在Power Shell中比较两个文本文件并将差异发送到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50510142/

相关文章:

powershell - 将涉及 AzureRM 的 powershell 脚本作为 Azure Web 作业运行

java - 使用Powershell用tomcat servlet-api.jar编译java

c# - 尝试在 C# 中运行 Powershell 命令时出现 System.InvalidProgramException

powershell - Get-WinEvent 中消息的 grep 字符串

powershell - 使用 PowerShell Azure 资源管理器 cmdlet 将现有 vhd 添加到 Azure VM

c# - PowerShell 3 未随 .NET Framework 4.51 安装

powershell - 修改函数中的 PowerShell 对象

powershell - 什么是@”运算符?

powershell - PowerShell 中根据版本号排序

azure - 无法将 Azure 自动化中的 AZAccount 与服务主体连接