Wie um zu überprüfen, ob die E-Mail gesendet wurde mit Powershell

Ich bin derzeit am schreiben eines Powershell-script, welches pings zu einem server und wenn eine Verbindung nicht hergestellt werden kann, sendet eine E-Mail an die IT-Abteilung, um den server manuell neu starten.

Jetzt kann das Skript erfolgreich senden der E-Mail, wenn der ping nicht erfolgreich ist, hat das Objekt eine Eigenschaft mit dem Wert, der angenommen wird, zu bewerten, zu "Wahren", aber ich kann das nicht verifizieren, denn beim Absenden der Mail, die variable selbst löscht, und daher die Eigenschaft existiert nicht mehr.

    $Outlook = New-Object -ComObject Outlook.Application
    $Mail = $Outlook.CreateItem(0)
    $Mail.To = "<recipient>"
    $Mail.Cc = "<some_cc>"

    $Mail.Send()
    # After this line, the variable is deleted!
    if ($Mail.Sent()) 
    # The line which is supposed to work, but evaluates to False everytime

Wie kann ich sicher sein, dass diese variable überlebt, bis ich das überprüfen kann, der Börse?

2 Antworten

  • I.T Delinquent
    3. Mai 2019

    Sie könnte die E-mail.send() innerhalb eines try - /catch-block. So es ausgeben würde, wenn es irgendwelche Fehler oder wenn es gelang. Plus, es gibt keine Notwendigkeit für eine andere variable.

    try{
       mail.send()
       write-host "success"
    }catch{
       write-host "fail"
    }
    
  • Mike L'Angelo
    4. Mai 2019

    Die variable wird nicht überleben nach der Methode "Send", und nicht einen Wert zurückgeben, entweder. Sie delegieren die tatsächlichen Versand-Aktion an Outlook, so dass Sie brauchen, um zu überprüfen, Outlook-Anwendung für Fehler (z.B. einen Schlag).

    Wenn der Versand über Outlook ist nicht erforderlich, Sie können mehrere Optionen mit

    try {
        Send-MailMessage -From 'monitoring@example.com' -To 'ITdesk@example.com' -Subject 'test' -Body 'whatever'  -Priority High -DeliveryNotificationOption OnSuccess, OnFailure -SmtpServer 'mail.example.com' -ErrorAction stop -Port 25
    }
    catch{
        write-warning "error in sending. $_"
    }
    

    Beachten Sie, dass, wenn Sie müssen authentifiziert senden, können Sie angeben, gespeichert Anmeldeinformationen über den-credential-parameter.

    Verweise hier: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-6