Send-MailMessage Аргумент Нет или пуст - PullRequest
0 голосов
/ 06 марта 2020

Может кто-нибудь, пожалуйста, помогите мне разобраться в этой части.

#Mail Configuration
$smtpUser = "email@domain.com"
$smtppass = ConvertTo-SecureString "PasswordAsPlainText" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList ($smtpuser, $smtppass)
$ToAddress = "toaddress@domain.com"
$FromAddress = "send@domain.com"
$SMTPSERVER = "smtp.office365.com"
$SMTPPORT = "587"

$MailParam = @{
        To = $ToAddress
        From = $FromAddress
        Subject = $subject
        Body = $Mail
        SMTPServer = $SMTPServer
        Port = $SMTPPORT
        Credential = $pscred
        }
#Send Email
$GetChildItem = Get-ChildItem -Path C:\Temp
if ($GetChildItem -ne $Null)
    {
    Write-Host "Backup Success"
    $subject = "$env:COMPUTERNAME SQL Backup Success"
    $Mail = "SQL Backup Succeded on the server, please see the attached report for more details"
    $attachment = $reportfile
    Send-MailMessage @MailParam -BodyAsHtml -usessl
   #Exit
    }
if ($GetChildItem -eq $Null)
    {
    Write-Host "Backup Failed"
    $subject = "$env:COMPUTERNAME SQL Backup Failed"
    $Mail = "SQL Backup Failed on the server, please see the attached report for more details"
    $attachment = $reportfile, $debuglog
    Send-MailMessage @MailParam -usessl -BodyAsHtml
    #Exit
    }

Теперь я не думаю, что что-то не так с кодом выше, я не опытный кодер, но я могу в значительной степени копировать и вставлять: ) и возьмите что-нибудь оттуда, чтобы это сработало для меня.

Проблема с приведенным выше кодом заключается в том, что при запуске он не работает в первый раз, но при повторном запуске он работает нормально. Ошибка, которую вы получаете в первый раз:

Send-MailMessage: Невозможно проверить аргумент в параметре 'Body'. Аргумент нулевой или пустой. Укажите аргумент, который не является пустым или пустым, а затем повторите команду. В C: \ Users \ Aasim \ Desktop \ Untitled1.ps1: 29 char: 26 + Send-MailMessage @MailParam -BodyAs Html -usessl + ~~~~~~~~~~ + CategoryInfo: InvalidData: ( :) [Send-MailMessage], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.PowerShell.Commands.SendMailMessage

Я не уверен, в чем проблема, и почему она не работает только в первый раз, но работает каждый следующий раз, пока вы не закроете и снова не откроете сценарий.

По сути, я создаю сценарий резервного копирования SQL, который выполняет резервное копирование баз данных на наш сетевой ресурс и затем отправляет мне электронное письмо, независимо от того, был ли он успешным или нет. пока остальная часть сценария работает просто отлично.

1 Ответ

0 голосов
/ 06 марта 2020

В ваших блоках If и Else вместо создания переменной $subject или $Mail обновите хеш-таблицу $MailParam. Кроме того, вы, кажется, пропустили переменную Attachment в вашем Send- MailMessage

if ($GetChildItem -eq $Null)
    {
    Write-Host "Backup Failed"
    $MailParam.Subject = "$env:COMPUTERNAME SQL Backup Failed"
    $MailParam.Body = "SQL Backup Failed on the server, please see the attached report for more details"
    $attachment = $reportfile, $debuglog
    Send-MailMessage @MailParam -usessl -BodyAsHtml -Attachments $attachment
    #Exit
    }
...