PowerShell - E-Mail versenden über Outlook
Hallo zusammen,
ich habe jetzt ein kleines Skript in PS gebastelt, das E-Mails verschicken soll. Das Skript wird aus anderen Skripten heraus aufgerufen.
Die Daten werden auch korrekt übermittelt, aber sobald in dem Skript der Funktionsaufruf von Send-Mail ist, sind plötzlich alle Variablen leer außer einer ($Subject). Zumal er immer eine Exception schmeißt, das ein Objekt nicht verwendet werden kann :S
In der Funktion Main wird noch alles richtig befüllt.
Dann, nachdem das Outlook Com-Objekt erstellt wurde, sind alle Variablen leer außer $Subject. Ich finde den Fehler nicht.
ich habe jetzt ein kleines Skript in PS gebastelt, das E-Mails verschicken soll. Das Skript wird aus anderen Skripten heraus aufgerufen.
Die Daten werden auch korrekt übermittelt, aber sobald in dem Skript der Funktionsaufruf von Send-Mail ist, sind plötzlich alle Variablen leer außer einer ($Subject). Zumal er immer eine Exception schmeißt, das ein Objekt nicht verwendet werden kann :S
param(
$bAttachments,
$Subject,
$Importance,
$Body,
$To,
$cc,
$FilePath,
$Files,
$PProcedure
)
function main()
{
Try {
# E-Mail versenden
[bool]$BoolAttachments = $bAttachments
[string]$Subject = $Subject
[int16]$Importance = $Importance
[string]$Text = $Body
[string]$To = $To
[string]$cc = $cc
Send-Mail -Subject $Subject `
-Importance $Importance `
-Body $Text `
-To $To `
-cc $cc `
-Source $FilePath `
-BoolAttachments $BoolAttachments `
-Dateien @($Files)
}
Catch {
$temp = $_.Exception
$invocationInfo = $_.InvocationInfo.PositionMessage
if ($_.InvocationInfo -ne $null) {
Write-Host $InvocationInfo
Write-Host $temp
}
}
}
# Funktion zum Senden einer E-Mail. Parameter müssen mit übergeben werden.
Function Send-Mail($Importance, $Subject, $Body, $To, $CC, $Source, $BoolAttachments, [Array]$Dateien)
{
Try {
# Erstellen eines Outlook Application Objekts
$o = New-Object -ComObject Outlook.Application
$mail = $o.CreateItem(0)
$mail.importance = $Importance ----> Exception wird verursacht
$mail.subject = $Subject
$mail.HTMLbody = $Body
$mail.To = $To
$mail.CC = $CC
# Gehe über alle Files in Pfad und füge nur Dateien mit bestimmten Name.Endung hinzu
if ($BoolAttachments)
{
$files = Get-ChildItem $Source
for ($i=0; $i -lt $files.Count; $i++) {
GetFiles -files $files
}
}
$mail.Send()
# Der E-Mail etwas Zeit geben zum verschicken
Start-Sleep 10
}
catch {
$temp = $_.Exception
$invocationInfo = $_.InvocationInfo.PositionMessage
if ($_.InvocationInfo -ne $null) {
# New-Log -TextID $InvocationInfo -LogArt 3 -LogAction ER
write-host $temp
}
}
}
main
In der Funktion Main wird noch alles richtig befüllt.
Dann, nachdem das Outlook Com-Objekt erstellt wurde, sind alle Variablen leer außer $Subject. Ich finde den Fehler nicht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 485845
Url: https://administrator.de/forum/powershell-e-mail-versenden-ueber-outlook-485845.html
Ausgedruckt am: 26.04.2025 um 00:04 Uhr
2 Kommentare
Neuester Kommentar

Erstens sind da überflüssige Variablendefinitionen in der Main Function (welche aber nicht der Fehler sind, aber sehr schlechter Stil wenn man hier Variablen aus dem übergeordneten Kontext aufgreift, Variablen sollte man überlichweise einer Funktion übergeben) sondern ein typischer Anfänger-Fehler, nämlich die Leerzeichen hinter(nicht vor) den Backticks an dieser Stelle, sollte dir aber die Intellisense auch eigentlich anzeigen.
(Hier sind Leerzeichen hinter den Backticks, die zu dem Fehler führen!)
https://www.computerperformance.co.uk/powershell/backtick/#Problem_with_ ...
Das führt dazu das alle Variablen außer dem Parameter Subject nicht an die Send-Mail Funktion übermittelt werden . Und in der Send-Mail Funktion führt das natürlich zur Exception weil die Variablen alle fehlen weil du sie nicht überprüfst.
(Hier sind Leerzeichen hinter den Backticks, die zu dem Fehler führen!)
Send-Mail -Subject $Subject `
-Importance $Importance `
-Body $Body `
-To $To `
-cc $cc `
-Source $FilePath `
-BoolAttachments $BoolAttachments `
-Dateien @($Files)
Das führt dazu das alle Variablen außer dem Parameter Subject nicht an die Send-Mail Funktion übermittelt werden . Und in der Send-Mail Funktion führt das natürlich zur Exception weil die Variablen alle fehlen weil du sie nicht überprüfst.