Benutzer mit den meisten Antworten
Erstellung einer HTML Tabelle im Body einer Email

Frage
-
Hallo zusammen,
ich habe folgendes script:
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}" $style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}" $style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }" $style = $style + "TD{border: 1px solid black; padding: 5px; }" $style = $style + "H2 {font-size:16px; font-weight: bold; font-family: sans-serif;}" $style = $style + "</style>" $body = "" $body += $Vari1 + "FEHLER abc<br>" $body += $Vari2 + "FEHLER xyz<br>" $body = ConvertTo-HTML -Body $body -Head $style | Out-String
Es wird ein Body im HTML-Stil erstellt. Jedoch wird keine Tabelle erstellt, sondern nur die Zeilen ausgegeben. Am Ende des Bodys sind diese Tags zu sehen:
<table> </table> </body></html>
Scheinbar werden die Werte nicht vom TAg <table> </table> umschlossen.
Hat jemand einen Tipp wie die Tabelle die Zeilen aufnimmt?
In die erste Spalte so die vari und der Text in die zweite Spalte.
GrußFrank
- Bearbeitet FrankinBerlin Donnerstag, 15. April 2021 13:53
Antworten
-
Die Vari wird durch $adServers = (Get-ADForest).globalcatalogs | sort befüllt und die zweite Spalte ist text.
Der Code oben ist passend.
Hmmm ... ich glaube, ich habe mich nicht deutlich genug ausgedrückt. Wenn Du eine HTML-Tabelle erstellt haben möchtest, musst Du ConvertTo-Html auch Daten (ein oder mehrere Objekte) anbieten, die man in einer Tabelle darstellen kann.
Schau mal hier:
$ProcessList = Get-Process | Where-Object MainWindowTitle | Select-Object -First 5 -Property Processname, ID, MainWindowTitle $body = $ProcessList | ConvertTo-HTML -as Table | Out-String $SendMailMessageParams = @{ From = 'FrankAus@Berlin.de' To = 'FrankIn@Berlin.de' SmtpServer = 'FranksSmtpServer' Body = "$body" BodyAsHtml = $true Subject = 'ProcessList as table' } Send-MailMessage @SendMailMessageParams
Wenn Du in diesem Schnipsel "From", "To" und "SmtpServer" an Deine Umgebung anpasst, sollte der Code so laufen.
Wenn Du einfach zwei unzusammenhängende Werte oder Arrays übergibst, kann PowerShell daraus keine Html-Tabelle bauen - es sollten strukturierte Daten sein.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Freitag, 16. April 2021 11:35
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 20. April 2021 16:14
Alle Antworten
-
Frank,
bitte Code als Code formatieren! Danke.
Bitte nochmal die Hilfe lesen! ;-) Das cmdlet ConvertTo-Html ist dafür gemacht, PowerSehll-Objekte in HTML umzuwandeln. Wenn Du dem cmdlet strukturierte Daten verfütterst, kannst Du mit dem Parameter "-As" und dem Wert "Table" die Ausgabe der Objekte beeinflussen.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
Der Parameter zeigt kein anderes Verhalten
Das liegt aber nicht am cmdlet sondern daran, dass Du ihm quasi keinen passenden Input anbietest.
Hier mal ein Schnipsel zur Veranschaulichung:
Get-Process | Select-Object -First 10 | ConvertTo-Html -As Table | Out-File -FilePath .\Process.html Invoke-Expression .\Process.html
Was willst Du denn eigentlich damit erreichen? Das Ganze wird ja wohl kaum dazu da sein, zwei Werte als HTML-Seite anzuzeigen, oder? ;-) :-D
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Donnerstag, 15. April 2021 15:17
-
mit abgefragten Meldungen
Bitte nicht so genau! :-/ Wie wär's wenn Du den Code postest, den Du wirklich benutzt? Sensible Informationen solltest Du natürlich vorher entfernen.
Haste Du einen anderen Ansatz?
Der Ansatz ist ja nicht verkehrt - nur die Umsetzung.
Hast Du den Code-Schnipsel mal probiert, den ich gepostet hatte?
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
Die Vari wird durch $adServers = (Get-ADForest).globalcatalogs | sort befüllt und die zweite Spalte ist text.
Der Code oben ist passend.
Hmmm ... ich glaube, ich habe mich nicht deutlich genug ausgedrückt. Wenn Du eine HTML-Tabelle erstellt haben möchtest, musst Du ConvertTo-Html auch Daten (ein oder mehrere Objekte) anbieten, die man in einer Tabelle darstellen kann.
Schau mal hier:
$ProcessList = Get-Process | Where-Object MainWindowTitle | Select-Object -First 5 -Property Processname, ID, MainWindowTitle $body = $ProcessList | ConvertTo-HTML -as Table | Out-String $SendMailMessageParams = @{ From = 'FrankAus@Berlin.de' To = 'FrankIn@Berlin.de' SmtpServer = 'FranksSmtpServer' Body = "$body" BodyAsHtml = $true Subject = 'ProcessList as table' } Send-MailMessage @SendMailMessageParams
Wenn Du in diesem Schnipsel "From", "To" und "SmtpServer" an Deine Umgebung anpasst, sollte der Code so laufen.
Wenn Du einfach zwei unzusammenhängende Werte oder Arrays übergibst, kann PowerShell daraus keine Html-Tabelle bauen - es sollten strukturierte Daten sein.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Freitag, 16. April 2021 11:35
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 20. April 2021 16:14
-
okay danke.
Hast Du eine Lösung ohne Convertohtml?Ich hatte es mal so probiert:
$Body = @() $body += New-Object -TypeName psobject -Property @{Server=$adServer; Meldung='FEHLER FailureCounts'} $body += New-Object -TypeName psobject -Property @{Server=$adServer; Meldung="FEHLER FailureCounts"}
Die Tabelle in HTML wurde gebaut.
In Outlook kamen nur die Werte an. ...;-(
-
okay danke.
Hast Du eine Lösung ohne Convertohtml?Das kommt auf die "Struktur" und die "Volatilität" der Daten an. Wenn es eine kleine und quasi immer gleiche Menge an Daten ist, die Du ausgeben möchtest, könntest Du eine HTML-Datei-Vorlage bauen, die möglichst eindeutige Platzhalter enthält, die Du dann mittels -replace mit den produktiven Daten ersetzen könntest.
Aber wie kommst Du eigentlich auf eine Tabelle? Die Liste der Global Catalog DCs ist ja nur eine Liste. Sind denn die anderen Daten, die Du übermitteln möchtest, wenigstens strukturierte Daten? Wie würden denn die Daten aussehen, wenn Du sie auf der Konsole ausgibst? Kannst Du ein Beispiel posten? (sensible Daten vorher entfernen oder unkenntlich machen!)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''