none
Powershell执行完命令后如何用邮件把结果发送出去 RRS feed

  • 问题

  • Robocopy.exe c:\Windows\System32\winevt\Logs\ \\xxxxx\Share Archive-Security* /mt /z /R:2

    如上命令,能否用powershell执行后把结果通过邮件的形式发送出去?邮件内容用html的格式。

    2020年12月25日 5:37

答案

  • 您好,

    使用PowerShell邮件发送命令结果是可以的。比如像这样

    #smtp服务器
    $Server = "XXX"
    #发件人
    $From = "XXX" 
    #密码
    $Password = "XXX" 
    #收件人
    $To = "XXX" 
    #邮件标题
    $Subject = "Robocopy Result" 
    #邮件内容
    $Body = (& {Robocopy.exe c:\Windows\System32\winevt\Logs\ \\xxxxx\Share Archive-Security* /mt /z /R:2}) -join "<br>" 
    
    $message = New-Object System.Net.Mail.MailMessage -ArgumentList $From, $To
    $message.Subject = $Subject
    $message.IsBodyHtml = $true
    $message.Body = $Body
    $smtp = New-Object Net.Mail.SmtpClient -ArgumentList $Server
    $smtp.Enablessl = $true 
    $smtp.Credentials = New-Object System.Net.NetworkCredential -ArgumentList $From, $Password
    $smtp.Send($message)

    使用$message.IsBodyHtml=$true来启用html格式。并且由于robocopy输出的结果只是一个字符串的数组,因此使用<br>标签进行连接。

    如果对邮件内容的格式还有其他要求,您可以自行编辑HMTL代码,比如像是这样

    $BodyHtml=@"
    <h2 style="background-color:red;font-family:arial;color:black;font-size:20px;">Robocopy Result</h2>
    <p style="background-color:blue;font-family:arial;color:white;font-size:15px;">$Body</p>
    "@
    $message.Body = $BodyHtml



    如您还有其他疑问,请随时与我们联系。 如果回答是有帮助的, 请将其标记为答案, 可以帮助其他有相同问题的社区成员, 并快速找到有用的答复。

    祝好

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.








    • 已编辑 Ian Xue 2020年12月28日 8:11
    • 已标记为答案 Air_9 2020年12月31日 1:56
    2020年12月28日 3:16

全部回复

  • 您好,

    使用PowerShell邮件发送命令结果是可以的。比如像这样

    #smtp服务器
    $Server = "XXX"
    #发件人
    $From = "XXX" 
    #密码
    $Password = "XXX" 
    #收件人
    $To = "XXX" 
    #邮件标题
    $Subject = "Robocopy Result" 
    #邮件内容
    $Body = (& {Robocopy.exe c:\Windows\System32\winevt\Logs\ \\xxxxx\Share Archive-Security* /mt /z /R:2}) -join "<br>" 
    
    $message = New-Object System.Net.Mail.MailMessage -ArgumentList $From, $To
    $message.Subject = $Subject
    $message.IsBodyHtml = $true
    $message.Body = $Body
    $smtp = New-Object Net.Mail.SmtpClient -ArgumentList $Server
    $smtp.Enablessl = $true 
    $smtp.Credentials = New-Object System.Net.NetworkCredential -ArgumentList $From, $Password
    $smtp.Send($message)

    使用$message.IsBodyHtml=$true来启用html格式。并且由于robocopy输出的结果只是一个字符串的数组,因此使用<br>标签进行连接。

    如果对邮件内容的格式还有其他要求,您可以自行编辑HMTL代码,比如像是这样

    $BodyHtml=@"
    <h2 style="background-color:red;font-family:arial;color:black;font-size:20px;">Robocopy Result</h2>
    <p style="background-color:blue;font-family:arial;color:white;font-size:15px;">$Body</p>
    "@
    $message.Body = $BodyHtml



    如您还有其他疑问,请随时与我们联系。 如果回答是有帮助的, 请将其标记为答案, 可以帮助其他有相同问题的社区成员, 并快速找到有用的答复。

    祝好

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.








    • 已编辑 Ian Xue 2020年12月28日 8:11
    • 已标记为答案 Air_9 2020年12月31日 1:56
    2020年12月28日 3:16
  • 你好,运行的时候会提示如下错误

    使用“1”个参数调用“Send”时发生异常:“根据验证过程,远程证书无效。”

    2020年12月31日 2:08
  • 您好,

    按照错误信息应该是验证证书的问题,您可以添加下信任证书或者注释掉$smtp.Enablessl = $true这行来停用ssl。

    祝好

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2020年12月31日 5:58
  • 停用SSL 就可以正常使用了。这个能否发送多个收件人?
    2021年1月4日 7:02
  • 您好,

    要发送多个收件人直接添加地址就可以了,比如 

    $To = "AAA" , "BBB", "CCC"

    如您还有其他疑问,请随时与我们联系。 如果回答是有帮助的, 请将其标记为答案, 可以帮助其他有相同问题的社区成员, 并快速找到有用的答复。

    祝好

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.


    • 已编辑 Ian Xue 2021年1月7日 3:27
    2021年1月7日 3:26
  • 按照你说的这个方法写了后,只能发给最后一个人就比如你这个只有CCC能收到

    您好,

    要发送多个收件人直接添加地址就可以了,比如 

    $To = "AAA" , "BBB", "CCC"

    如您还有其他疑问,请随时与我们联系。 如果回答是有帮助的, 请将其标记为答案, 可以帮助其他有相同问题的社区成员, 并快速找到有用的答复。

    祝好

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.



    2021年1月7日 9:56
  • 您好,

    这样的话可以试下使用Send-MailMessage

    $Server = "XXX"
    $From = "XXX" 
    $Password = ConvertTo-SecureString “XXX” -AsPlainText -Force 
    $Cred = New-Object System.Management.Automation.PSCredential ($From, $Password)
    $To = "XXX","XXX", "XXX"
    $Subject = "Robocopy Result" 
    $Body = (& {Robocopy.exe c:\Windows\System32\winevt\Logs\ \\xxxxx\Share Archive-Security* /mt /z /R:2}) -join "<br>" 
    Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -BodyAsHtml -SmtpServer $Server -Credential $Cred

    如您还有其他疑问,请随时与我们联系。 如果回答是有帮助的, 请将其标记为答案, 可以帮助其他有相同问题的社区成员, 并快速找到有用的答复。

    祝好

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.



    • 已编辑 Ian Xue 2021年1月8日 3:20
    2021年1月8日 3:17