none
E-Mail Empfänger und Inhalt zusammenfassen

    Frage

  • Hallo,

    ich bräuchte eure Hilfe. Ich habe unten einen Teil meines Powershell Skriptes.

    Ich habe eine Excel mit zwei Spalten, Raum und E-Mail.

    Das Skript soll die Liste durchgehen und eine E-Mail mit dem Raum versenden. Das funktioniert soweit.

    Allerdings macht es keinen Sinn wenn z.b Max eine E-Mail für jeden Raum bekommt.

    Ich weiß nicht wie ich das so ändern kann, dass eine E-Mail verschickt wird in der alle seine Räume vorkommen.

    Nochmal zur Verständnis: Max bekommt eine Mail mit dem Inhalt Wohnzimmer, Bad, Küche, Keller.

    Und nicht: Max bekommt eine Mail mit Wohnzimmer, dann nochmal eine Mail mit Bad und nochmal eine Mail mit Kücke, etc.

    while($Table.Cells.Item($zeile,$spalte).Text.Length -gt 0) {
    
        if ($true) {
    
            #Auswahl der E-Mail
            $User_Mail = $Table.Cells.Item($zeile,$spalte).Text
            $zeile++
    
            #Ausgabe E-Mail
            $User_Mail    
        
            #User aus dem AD ziehen
            $Anrede = Get-ADUser -Filter 'EmailAddress -like $User_Mail'  -Properties extensionAttribute7 | Select-Object -ExpandProperty extensionAttribute7
            $Name = Get-ADUser -Filter 'EmailAddress -like $User_Mail'  -Properties extensionAttribute7 | Select-Object -ExpandProperty Surname
           
            $Room = $Table.Cells.Item($zeile_room,$spalte_room).Text
            $zeile_room++
        
            if ($Anrede -eq $Name){
                continue
             }
    
        }
    
        $body = "Sie haben:"
    		$( [System.Environment]::NewLine ) +$Room 
    
    
        #SMTP Adresse
        $SmtpClient.Host = "..."
    
        #Absender Adresse
        $mailmessage.from = "..."
    
        #Betreff der E-Mail
        $mailmessage.Subject = “...”
        $mailMessage.IsBodyHtml = $false
        
        #Empfänger der E-Mail
        $mailmessage.To.add($User_Mail)
        
        #Inhalt der E-Mail
        $mailmessage.Body = $body   
        
        #E-Mail absenden
        $smtpclient.Send($mailmessage)
    
    }

    Ich danke euch im Voraus.

    Mittwoch, 31. Januar 2018 09:47

Antworten

  • Hi,

    nur um Dir vielelicht einen Denkanstoss in eine Richtung zu geben (ich mag mich nicht mit Excel-Dateien und Email-Versenden befassen). Ich hab einfach mal ein paar Daten "angenommen" ....

    $Data = @'
    Name,Raum
    Max,Kueche
    Max,Keller
    Max,Speisesaal
    Rudi,Besenkammer
    Paule,Kuehlschrank
    Olaf,Weinkeller
    '@
    
    $data | 
        ConvertFrom-Csv | 
            Group-Object -Property Name 

    Probier mal, ob Du damit was angangen kannst.  ;-)

    Was mit noch einfällt ... Powershell kennt das cmdlet Send-MailMessage!!!


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    Mittwoch, 31. Januar 2018 10:24

Alle Antworten

  • Hi,

    nur um Dir vielelicht einen Denkanstoss in eine Richtung zu geben (ich mag mich nicht mit Excel-Dateien und Email-Versenden befassen). Ich hab einfach mal ein paar Daten "angenommen" ....

    $Data = @'
    Name,Raum
    Max,Kueche
    Max,Keller
    Max,Speisesaal
    Rudi,Besenkammer
    Paule,Kuehlschrank
    Olaf,Weinkeller
    '@
    
    $data | 
        ConvertFrom-Csv | 
            Group-Object -Property Name 

    Probier mal, ob Du damit was angangen kannst.  ;-)

    Was mit noch einfällt ... Powershell kennt das cmdlet Send-MailMessage!!!


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    Mittwoch, 31. Januar 2018 10:24
  • Ich werde es ausprobieren, meine Versuche scheitern gerade :D
    Mittwoch, 31. Januar 2018 10:45
  • Ich komm nicht drauf. Das mit der Gruppe ist schon klever, aber ich weiß echt nicht wie ich das bei mir einbauen kann.
    Mittwoch, 31. Januar 2018 12:01
  • Hallo,

    noch ein Denkanstoß:
    Aktuell verarbeitest Du ja jede Zeile deiner Datei direkt. Besser, bzw. von Dir gewünscht ist es, jeden Benutzer zu verarbeiten, nachdem ihm alle Räume (durch das Script) zugeordnet worden sind.

    Du baust Dir also ein Array zusammen, und fragst es dann nach allen Datensätzen, wo z.B. "Max" drin vorkommt. Annahme: Array mit Header = "Name";"Raum":

    $Raum = ($Array | where-object {$_.Name -like "Max"}).Raum

    In deiner Variable $Raum sind dann alle dem Max zugeordneten Räume drin.

    Dann kannst Du dem Max einfach eine Mail schreiben (lassen), wo Du die Variable $Raum in den Body rein packst. Als Ergebnis dürften dann alle ihm zugeordneten Räume untereinander in der Mail stehen. Selbstverständlich kannst Du das auch in eine Zeile oder beliebig anders anordnen, aber das darfst Du selber ausprobieren.

    MfG, Jannik D.

    Mittwoch, 31. Januar 2018 12:16
  • Hmmm ... na so schwer isses jetzt aber auch nicht mehr ...
    $Data = @'
    Name,Raum
    Max,Kueche
    Max,Keller
    Max,Speisesaal
    Rudi,Besenkammer
    Paule,Kuehlschrank
    Olaf,Weinkeller
    '@
    
    $data | 
        ConvertFrom-Csv | 
            Group-Object -Property Name  | 
                Select-Object -Property Name,@{Name='Raum';Expression={($_.Group.Raum) -join ','  }}
    
    Mit dieser Ausgabe solltest Du jetzt aber in der Lage sein, ein Schleifchen zu bauen, welches Dir die Emails versendet, oder?

    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 31. Januar 2018 12:36
  • Cool danke, mal schauen ob ich es hin bekomme. Ich stehe so übertreiebn auf dem Schlauch.
    Mittwoch, 31. Januar 2018 13:13
  • Na wie wär's denn dann, wenn Du Dir die Grundlagen vom Powershell in strukturierter und didaktischer aufbereiteter Art und Weise aneignest?  ;-) Das erspart Dir in Zukunft bestimmt eine Menge Frustration.

    Kostenloser Video Kurs: Microsoft Virtual Academy - Getting Started with Microsoft PowerShell.


    Best regards,

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 31. Januar 2018 13:38
  • Eigentlich mache ich nicht so viel in Powershell. Aber danke für den Link!

    Soweit so gut, ich weiß ehrlich gesagt immernoch nicht, wie ich das von oben bei mir einbauen soll. Für mich habe ich die Ausgabe als Textdokument exportiert und wieder eingelesen. Ist nicht die rosigste Variante, aber so komm ich auch irgendwie hin.

    Kann mir nochmal jemand einen Denkanstoß geben?  Laie eben :D

    Donnerstag, 1. Februar 2018 06:33
  • Hast du das hier gelöst? Wenn nicht beschreibe noch mal kurz wo du gerade hängst.

     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 6. Februar 2018 11:13
    Moderator