Форматирование электронной почты с помощью powershell с использованием сообщения send-mail

Задача: найти всех пользователей с ограниченными возможностями, у которых что-то есть в атрибуте ipPhone, отправить результаты по электронной почте.

Проблема: когда я получаю электронное письмо, данные не разделяются по учетной записи пользователя или в таблице. Не знаю, как это исправить.

Код:`#Add-WindowsFeature RSAT-AD-PowerShell# необходимо для сервера 2012+, если на нем не установлены инструменты rstat #Import-Module activedirectory# Необходимо импортировать modeule для чтения powershell

      $emailto = 'markbuehler@milgard.com'
$emailfrom = 'markbuehler@milgard.com'
$emailsubject = "Disabled Users who have IpPhone Attribute Active"
$smtp_server = 'corp-smtp01.milgardwindows.com'

$disabledusers = get-aduser -SearchBase 
"OU=MIMilgardUsersandComputers,DC=milgardwindows,DC=com" -Filter {(Enabled -eq $false -and 
ipPhone -like "*")} -Properties * | Select-Object Name,UserPrincipalName,Office,ipPhone | 
Format-Table -Property Name,UserPrincipalName,Office,ipPhone


Send-MailMessage -To $emailto -From $emailfrom -Subject $emailsubject -SmtpServer $smtp_server 
-BodyasHtml ($disabledusers | Out-String)'

Результат сообщения электронной почты: Имя UserPrincipalNameOfficeipPhone ---- ----------------- ------ ------- Adi RasilauAdiRasilau@milgard.com Milgard - Сакраменто 2742 Най Джонс NaiJones@milgard.com Милгард - Сакраменто 2780 Филлип Уилер PhillipWheeler@milgard.com Милгард - Сакраменто 2727 Джой Роджерс JoyRogers@milgard.com Милгард - Темекула 3286"

1 ответ

Решение

Поскольку вы используете Format-Table, вам необходимо убедиться, что данные попадают в ваше электронное письмо в формате HTML с помощью

  • моноширинный шрифт, поэтому он будет выглядеть так же, как в консоли
  • красиво отформатированная HTML-таблица

Что вы забываете в своем Send-Mailmessage строка заключается в том, что вам нужно отправить таблицу как Body.

Самый простой способ сохранить данные в виде таблицы - обернуть вывод таблицы внутри <pre>..</pre>теги, поэтому он будет отображаться моноширинным шрифтом, а символы новой строки сохранятся.
Я также хотел бы показать вам, как использовать Splatting для командлетов, которые могут принимать множество параметров:

      # Get-ADUser by default already returns these properties:
# DistinguishedName, Enabled, GivenName, Name, ObjectClass, ObjectGUID, SamAccountName, SID, Surname, UserPrincipalName
$searchBase    = "OU=MIMilgardUsersandComputers,DC=milgardwindows,DC=com"
$filter        = "Enabled -eq 'false' -and ipPhone -like '*'"
$disabledusers = Get-ADUser -SearchBase $searchBase -Filter $filter -Properties Office,ipPhone

# stringify the results into a table as string and wrap inside '<pre>..</pre>' tags
$table = '<pre>{0}</pre>' -f ($disabledusers | 
                              Format-Table -AutoSize -Property Name,UserPrincipalName,Office,ipPhone | 
                              Out-String)

# or create a HTML table from it
# $table = $disabledusers | ConvertTo-Html -Property Name,UserPrincipalName,Office,ipPhone
# in case you do a HTML table, also create a CSS style for it so it shows up nicely formatted

# create a Hashtable for splatting
$mailParams = @{
    To         = 'markbuehler@milgard.com'
    From       = 'markbuehler@milgard.com'
    Subject    = 'Disabled Users who have IpPhone Attribute Active'
    SmtpServer = 'corp-smtp01.milgardwindows.com'
    Body       = $table
    BodyAsHtml = $true
    # more parameters can go here
}
# send the email
Send-MailMessage @mailParams
Другие вопросы по тегам