Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst PowerShell - E-Mail versenden über Outlook

Mitglied: Pat.bat

Pat.bat (Level 1) - Jetzt verbinden

16.08.2019 um 09:44 Uhr, 286 Aufrufe, 2 Kommentare

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

01.
param(
02.
    $bAttachments,
03.
    $Subject,
04.
    $Importance,
05.
    $Body,
06.
    $To,
07.
    $cc,
08.
    $FilePath,
09.
    $Files,
10.
    $PProcedure
11.
)
12.

13.
function main()
14.
{
15.
    Try {
16.
    # E-Mail versenden
17.
    [bool]$BoolAttachments = $bAttachments
18.
    [string]$Subject = $Subject
19.
    [int16]$Importance = $Importance
20.
    [string]$Text = $Body
21.
    [string]$To = $To
22.
    [string]$cc = $cc
23.

24.
    Send-Mail -Subject $Subject ` 
25.
              -Importance $Importance  ` 
26.
              -Body $Text ` 
27.
              -To $To `
28.
              -cc $cc ` 
29.
              -Source $FilePath `
30.
              -BoolAttachments $BoolAttachments `
31.
              -Dateien @($Files) 
32.
    }
33.
    Catch {
34.
	        $temp = $_.Exception
35.
	        $invocationInfo = $_.InvocationInfo.PositionMessage
36.
	        if ($_.InvocationInfo -ne $null) {
37.
                Write-Host $InvocationInfo
38.
                Write-Host $temp 
39.
            }
40.
        }
41.
    }
42.

43.
# Funktion zum Senden einer E-Mail. Parameter müssen mit übergeben werden.
44.
Function Send-Mail($Importance, $Subject, $Body, $To, $CC, $Source, $BoolAttachments, [Array]$Dateien) 
45.
{
46.
    Try {
47.
    # Erstellen eines Outlook Application Objekts
48.
    $o = New-Object -ComObject Outlook.Application
49.

50.
    $mail = $o.CreateItem(0)
51.
    $mail.importance = $Importance           ----> Exception wird verursacht
52.
    $mail.subject = $Subject
53.
    $mail.HTMLbody = $Body 
54.
    $mail.To = $To
55.
    $mail.CC = $CC
56.
    
57.
 
58.
    # Gehe über alle Files in Pfad und füge nur Dateien mit bestimmten Name.Endung hinzu 
59.
    if ($BoolAttachments)
60.
        {
61.
            $files = Get-ChildItem $Source
62.
            for ($i=0; $i -lt $files.Count; $i++) {
63.

64.
            GetFiles -files $files
65.
            }
66.
        }
67.

68.
        $mail.Send()
69.
 
70.
        # Der E-Mail etwas Zeit geben zum verschicken
71.
        Start-Sleep 10
72.
    }
73.
    catch {
74.
	    $temp = $_.Exception
75.
	    $invocationInfo = $_.InvocationInfo.PositionMessage
76.
	    if ($_.InvocationInfo -ne $null) {
77.
            # New-Log -TextID $InvocationInfo -LogArt 3 -LogAction ER
78.
            write-host $temp
79.
        }
80.
    }
81.
}
82.

83.
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.
Mitglied: 140777
LÖSUNG 16.08.2019, aktualisiert um 10:14 Uhr
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!)
01.
Send-Mail -Subject $Subject ` 
02.
              -Importance $Importance  `  
03.
              -Body $Body ` 
04.
              -To $To ` 
05.
              -cc $cc `
06.
              -Source $FilePath `
07.
              -BoolAttachments $BoolAttachments `
08.
              -Dateien @($Files) 
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.
Bitte warten ..
Mitglied: Pat.bat
16.08.2019, aktualisiert um 13:42 Uhr
@140777

Danke, habs jetzt mit deiner Hilfe hinbekommen. Das einzige was ich jetzt noch lösen muss, ist die UTF-8 Konvertierung für den HTMLBody

anbei der gesamte Code:

01.
param(
02.
    $bAttachments,
03.
    $Subject,
04.
    $Importance,
05.
    $Body,
06.
    $To,
07.
    $cc,
08.
    $FilePath,
09.
    $Files,
10.
    $PProcedure
11.
)
12.

13.
$Signatur2 = Get-Content -Path "G:\FD_50_Bank\System\Aufgabenplanungen\E-Mail\Signatur.htm"
14.
$htmlBody = "<HTML><meta charset=UTF-8><BODY><p>$Body</p><\BODY><\HTML>"
15.
# Funktion des LogWriters
16.
#-------------------------------------------------------------------
17.
function New-Log($TextID, $LogArt, $LogAction, $Value1, $Value2, $Value3, $Value4)
18.
{
19.
    $LogPath = "..\Logs\E-Mail.log"
20.
    &.\WriteLog.ps1 -LogPath $LogPath -TextID $TextID -LogArt $LogArt -Action $LogAction -Val1 $Value1 -Val2 $Value2 -Val3 $Value3 -Val4 $Value4
21.
}
22.

23.
# Funktion zum Senden einer E-Mail. Parameter müssen mit übergeben werden.
24.
Function Send-Mail($Importance, $Subject, $Body, $To, $CC, $Source, $BoolAttachments, [Array]$Dateien) 
25.
{
26.
    Try {
27.
        # Erstellen eines Outlook Application Objekts
28.
        $o = New-Object -ComObject Outlook.Application
29.

30.
        $mail = $o.CreateItem(0)
31.
        $mail.importance = $Importance          # 1 = Normal, 2 = Wichtig
32.
        $mail.subject = "$Subject"        
33.
        $mail.HTMLbody = "$Body $Signatur2"
34.
        $mail.To = "$To"                       
35.
        $mail.CC = "$CC"                       
36.
 
37.
        # Gehe über alle Files in Pfad und füge nur Dateien mit bestimmten Name.Endung hinzu 
38.
        if ($BoolAttachments)
39.
            {
40.
                $files = Get-ChildItem $Source
41.
               for ($i=0; $i -lt $files.Count; $i++) {
42.

43.
                GetFiles -files $files
44.
              }
45.
            }
46.

47.
            $mail.Send()
48.
 
49.
            # Der E-Mail etwas Zeit geben zum verschicken
50.
            Start-Sleep 5
51.

52.
            # Outlook Objekt Schließen
53.
             $o.Quit()
54.
        }
55.
    catch {
56.
	    $temp = $_.Exception
57.
	    $invocationInfo = $_.InvocationInfo.PositionMessage
58.
	    if ($_.InvocationInfo -ne $null) {
59.
            write-host $temp
60.
        }
61.
    }
62.
}
63.

64.
function GetFiles( $files )
65.
{
66.
    $outfileName = $files[$i].Name
67.
    $outfileNameFullname = $files[$i].FullName
68.
    $outfileNameExtension = $files[$i].Extension
69.
 
70.
    # wenn der Name.Endung der ist, den wir wollen, füge die Datei hinzu
71.
    # Dateien: "DatentraegerbegleitzettelEVSollst.rtf", "hhdopA.dat", "hhdopA-neue Schnittstelle.dat"
72.
    Foreach ( $f in $Dateien) {
73.
        if($outfileName -eq $f)
74.
        {
75.
            $mail.Attachments.Add($outfileNameFullname);
76.
        }
77.
    }
78.
}
79.

80.
Send-Mail   -Importance $Importance `
81.
            -Subject $Subject `
82.
            -Body $htmlBody `
83.
            -To $To `
84.
            -CC $cc `
85.
            -Source $FilePath `
86.
            -BoolAttachments $BoolAttachments `
87.
            -Dateien @($Files)

Ich nutze Visual Studio Code, dort hat er mir nicht angezeigt, das nach dem Backticks was "faul" ist.
Bitte warten ..
Ähnliche Inhalte
Outlook & Mail
E-Mail versenden mit PowerShell
gelöst Frage von 112TimoOutlook & Mail6 Kommentare

Hallo liebe Comunity, ich soll mit hilfe der Powershell eine E-Mail mit Dateianhang versenden können, jedoch zeigt diese mir ...

Outlook & Mail
Outlook E-Mail Verteiler
Frage von Heinrich-QuerdarOutlook & Mail2 Kommentare

Hallo zusammen, ich bin Mitglied eines Verteilers in unserer Firma zu dem Thema Produktmanagement. Wenn ich nun eine eMail ...

Exchange Server
E-Mail to NTFS-Folder Powershell
Frage von VoiperExchange Server10 Kommentare

Hallo in die Runde, hat irgendjemand ein Script rumliegen, dass E-mails (von Exchange 2016) aus einem bestimmten Postfach mit ...

Batch & Shell
E-Mail Header via Powershell auslesen
Frage von BleifussBatch & Shell7 Kommentare

Hallo, ich suche ein Möglichkeit, die Header Informationen aller E-Mails eines Exchange Online Postfaches auszulesen und daraus die IP-Adressen ...

Neue Wissensbeiträge
Windows 10

"Windows 10 Pro V1903: Gruppenrichtlinie "Telemetrie zulassen" aktivierbar?"

Tipp von Snowbird vor 5 StundenWindows 101 Kommentar

Sicherheits-Tools

TrendMicro Worry-Free Business Security 10.0 SP1 - Jetzt in Deutsch verfügbar! (Windows 10 1903 Support)

Tipp von TrinXx vor 1 TagSicherheits-Tools1 Kommentar

Moin! Nach wochenlangem Warten wird Trend Micro das SP1 für WFBS 10 voraussichtlich am 26.08.19 veröffentlichen. Ich habe das ...

Hyper-V
Setup VM W2016 startet nicht in Hyper-V 2016
Erfahrungsbericht von keine-ahnung vor 3 TagenHyper-V7 Kommentare

Moin, sitze gerade über meinem neuen Server und versuche, die VM auf den Host zu prügeln. Jetzt wollte ich ...

Server-Hardware

HPE Proliant ML350P Gen8 Probleme mit Zugriff auf Raid-Volumes

Erfahrungsbericht von goscho vor 3 TagenServer-Hardware1 Kommentar

Hallo Leute, das Problemgerät: HPE ML350P G8 Windows Server 2012R2 HyperV-Host 8 x 300 GB 10K SAS HDD (1 ...

Heiß diskutierte Inhalte
Server
Ein Server ins Haus stellen. Was brauche ich dafür?
Frage von JoschiTomServer15 Kommentare

Hallo Community, ich spiele mit dem Gedanken eine Server mir zu holen. Was brauche ich dafür? Und wie sind ...

Windows Server
Ist es möglich, eine deutsche W2016 Installation mit einer UK-Lizenz zu aktivieren?
gelöst Frage von keine-ahnungWindows Server10 Kommentare

Moin at all, ist ja noch Freitag. Ich habe hier noch zwei UK OEM W2016 Standard Pakete rumfliegen Muss ...

Batch & Shell
Mittels SED Text ersetzen in Anführungszeichen
gelöst Frage von nekronBatch & Shell9 Kommentare

Moin … bin nicht wirklich der SED/regex Mensch, vielleicht kann mir jemand auf die Schnelle Helfen :) ich habe ...

LAN, WAN, Wireless
Mikrotik Gast-Wlan keine Verbindung zum Internet?
Frage von dirkschwarzLAN, WAN, Wireless8 Kommentare

Guten Morgen, habe ein wahrscheinlich einfaches Problem, bei dem ich aber nicht wirklich weiter komme Ich möchte ein Gast-Wlan ...