
Ich habe ein Skript, mit dem ich dank ActiveDirectory dynamisch eine E-Mail mit einigen Informationen senden und diese an bestimmte Personen senden möchte, je nachdem, wer im Unternehmen das Skript ausführt.
Ich habe einen weiteren Codeabschnitt, der erkennt, von welcher Organisationseinheit aus der Benutzer oder das Dienstkonto dies ausführt. Machen Sie sich deshalb für diese Frage keine Gedanken darüber.
Was ich bisher habe, ist ungefähr das hier:
function SendEmail
{
Send-MailMessage -To $Recipients -From "Info <[email protected]>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}
$To = Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | Format-List EmailAddress | Out-String
Ich versuche, das Cmdlet Send-MailMessage zu verwenden, aber E-Mails müssen in einem bestimmten Format an die Empfänger gesendet werden.
Ein einzelner Empfänger ist:
"John Doe <[email protected]>"
Mehrere Empfänger sollten wie folgt aussehen:
"John Doe
<[email protected]>", "Jane Doe <[email protected]>"
Das Problem ist dann knifflig, da das Ergebnis von $To das folgende Format hat:
E-Mail-Adresse:[email geschützt]
E-Mail-Adresse:[email geschützt]
Dieses Format muss wie oben gezeigt in das Beispiel mit mehreren Empfängern konvertiert werden.
Ich weiß nicht, wie ich die Daten richtig erfassen und formatieren und sicherstellen kann, dass sie in dem von Send-Mailmessage verwendeten Format bleiben.
TL;DR - Es muss eine Möglichkeit geben, die E-Mail-Adresse(n) aller Benutzer in einer bestimmten Organisationseinheit in ActiveDirectory abzurufen und diese E-Mail-Adresse(n) so zu formatieren, dass sie mit Send-MailMessage gesendet werden kann.
Antwort1
Senden Sie E-Mails aus Powershell-Skripten an mehrere Empfänger basierend auf ActiveDirectory-Benutzern
Dieses Format muss wie oben gezeigt in das Beispiel mit mehreren Empfängern konvertiert werden.
Ich weiß nicht, wie ich die Daten richtig erfassen und formatieren und sicherstellen kann, dass sie in dem von Send-Mailmessage verwendeten Format bleiben.
Es muss eine Möglichkeit geben, die E-Mail-Adresse(n) aller Benutzer in einer bestimmten Organisationseinheit in ActiveDirectory abzurufen und diese E-Mail-Adresse(n) so zu formatieren, dass sie mit Send-MailMessage gesendet werden kann.
Unten finden Sie die PowerShell-Logik, um die Ausgabe in den durch Kommas getrennten Werten (ausgenommen NULL-Werte) für die E-Mail-Adresseigenschaften der Konten zu erhalten, die Ihre Logik erfasst.
Ich habe dieses Format getestet und bestätigt, dass es in meiner Umgebung wie erwartet funktioniert, ohne die Logik zu verwenden, über die Sie sagen, dass man sich keine Gedanken machen muss (z. B. $OUDetected
).
- Bitte beachten Sie, dass das Format
Send-MailMessage
mit dem-To
Parameter mit einem Format von einwandfrei funktioniert, sodass jede E-Mail-Adresse mit nur dem lokalen Postfachteil und dem durch Kommas getrennten Domänennamen ausreicht.[email protected],[email protected]
Ich werde hineinsteckenMein Arbeitsbeispielunten und ich werde dieIhr Beispielunten basierend auf dem, was Sie angegeben haben und wie ich bestätigen konnte, dass es in meinem Fall einwandfrei funktioniert hat.
Ihr Beispiel (mit meiner hinzugefügten Arbeitslogik)
function SendEmail
{
Send-MailMessage -To $Recipients -From "Info <[email protected]>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}
$To = (Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String
Ihr Beispiel (Iteriert zu Adressen)
function SendEmail
{
Send-MailMessage -To $To -From "Info <[email protected]>" -Subject "Account Report" -Body $Body -SmtpServer smtpserver.domain.com
}
$ToAddresses = Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress -Searchbase $OUDetected |
Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress
ForEach ($ToAddress in $ToAddresses) {
$To = $ToAddress
SendEmail
}
Mein Arbeitsbeispiel
(Get-ADUser -Filter "(Name -like '*')" -Properties Name, EmailAddress | Where-Object {$_.EmailAddress -ne $null} | Select -ExpandProperty EmailAddress) -join "," | Out-String