webentwicklung-frage-antwort-db.com.de

So hängen Sie eine Datei mit PowerShell an eine E-Mail an

Ich habe ein PowerShell-Skript geschrieben, mit dem eine E-Mail erstellt wird. Ich kann jedoch keine Datei anhängen. Die Datei ist vorhanden und PowerShell kann sie öffnen. Könnte mir jemand sagen, was ich falsch mache?

$ol = New-Object -comObject Outlook.Application 
$message = $ol.CreateItem(0)
$message.Recipients.Add("Deployment")  
$message.Subject = "Website deployment"  
$message.Body = "See attached file for the updates made to the website`r`n`r`nWarm Regards`r`nLuke"

# Attach a file this doesn't work
$file = "K:\Deploy-log.csv"
$attachment = new-object System.Net.Mail.Attachment $file
$message.Attachments.Add($attachment)
10
TheLukeMcCarthy

Ich habe das oben genannte zum Arbeiten gebracht, indem ich die Leitung entfernt habe

$attachment = new-object System.Net.Mail.Attachment $file

und ändern

$message.Attachments.Add($attachment)

zu

$message.Attachments.Add($file)

Die von @Keith Hill angebotene Lösung wäre zwar besser, selbst mit vielem Brillen konnte ich es nicht schaffen.

4
TheLukeMcCarthy

Wenn Sie mit PowerShell 2.0 arbeiten, verwenden Sie einfach das integrierte Cmdlet Send-MailMessage:

C:\PS>Send-MailMessage -from "User01 <[email protected]>" `
                       -to "User02 <[email protected]>", `
                           "User03 <[email protected]>" `
                       -subject "Sending the Attachment" `
                       -body "Forgot to send the attachment. Sending now." `
                       -Attachment "data.csv" -smtpServer smtp.fabrikam.com

Wenn Sie dieses kopieren/einfügen, achten Sie auf den zusätzlichen Platz, der nach dem Backtick hinzugefügt wird. PowerShell mag es nicht.

12
Keith Hill

Das funktionierte für mich mit Powershell

Variablen definieren:

$fromaddress = "[email protected]" 
$toaddress = "[email protected]" 
$Subject = "Test message" 
$body = "Please find attached - test"
$attachment = "C:\temp\test.csv" 
$smtpserver = "mail.pd.com" 

Verwenden Sie die Variablen im Skript:

$message = new-object System.Net.Mail.MailMessage 
$message.From = $fromaddress 
$message.To.Add($toaddress)
$message.IsBodyHtml = $True 
$message.Subject = $Subject 
$attach = new-object Net.Mail.Attachment($attachment) 
$message.Attachments.Add($attach) 
$message.body = $body 
$smtp = new-object Net.Mail.SmtpClient($smtpserver) 
$smtp.Send($message)
1
P.D

Sie können dazu send-mailmessage oder system.net.mail.MailMessage verwenden. Interessanterweise besteht zwischen den beiden Ansätzen ein erheblicher Unterschied in der Ausführungszeit. Mit measure-command können Sie die Ausführungszeit der Befehle beobachten.

0
Bill