Переменная тела электронной почты Powershell

#email #powershell #variables

#Адрес электронной почты #powershell #переменные

Вопрос:

У меня возникла проблема с получением результатов переменной в приемлемом / читаемом формате, которые отправляются по электронной почте.

Ниже приведен сценарий, который я использовал,

 $body = Search-ADAccount -UsersOnly -AccountExpired -SearchBase 'OU=Test1,OU=TEST,OU=Accounts,DC=home,DC=ac,DC=uk' | select SamAccountName, DistinguishedName, AccountExpirationDate

$emailto = 'test@home.ac.uk'
$emailfrom = 'AD-Accounts@home.ac.uk'
$emailserver = '127.0.0.1'

Send-MailMessage -To $emailto -From $emailfrom -Subject 'Expired Accounts' -Body $body -SmtpServer $emailserver 
  

Вывод переменной $ body — это именно то, что я хочу видеть в теле электронного письма.

sAMAccountName Различаемое имя AccountExpirationDate ————— —————— ——————— jumartin CN= первый пользователь, подразделение= test1, ПОДРАЗДЕЛЕНИЕ= Test, подразделения= Accounts, DC=home, DC= ac, DC= uk 19/10/2016 00:00:00
значение ricohvalue CN= второй пользователь, подразделение= test1, ПОДРАЗДЕЛЕНИЕ=TEST, подразделения=Ac, DC = uk 09.02.2016 00:00:00

Однако электронное письмо выводится пустым, если имеется более одного пользователя с истекшим сроком действия, и если есть один пользователь с истекшим сроком действия, то оно выводится в следующем формате:-

@{sAMAccountName=userone; distinctivedname=CN = первый пользователь, ПОДРАЗДЕЛЕНИЕ = test1, ПОДРАЗДЕЛЕНИЕ = test, ПОДРАЗДЕЛЕНИЕ= Accounts, DC= home, DC = ac, DC = uk; Дата создания учетной записи = 19.10.2016 00:00:00}

Все, что я ищу, это sAMAccountName, Distinctedname и AccountExpirationDate в удобном построчном формате в теле электронного письма.

я не знаю, как я буду фиксировать то, что я вижу на экране в электронном письме. Может кто-нибудь сказать мне, что я делаю не так.

Ответ №1:

Хотя у меня нет учетной записи Search-Ad для тестирования. Использование аналогичного Get-QADUser из Quest выдает следующую ошибку, когда командлет возвращает нескольких пользователей в массив:

 Send-MailMessage : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Body'.
  

Поэтому лучше всего убедиться, что то, что вы вводите в тело, является строкой.

 Send-MailMessage -To $emailto -From $emailfrom -Subject 'Expired Accounts' -Body ($body | Out-String) -SmtpServer $emailserver
  

Или преобразуйте таблицу в правильный HTML и используйте параметр BodyAsHtml.

Комментарии:

1. Адамар: это здорово … все работает так, как должно быть. Чтобы я знал, что я делал не так, почему мне пришлось выводить $ body в Out-String, когда это уже была строка, записанная в переменной… надеюсь, я смогу понять, чего мне не хватало. Еще раз спасибо за вашу помощь.

2. Search-ADAccount возвращает объект AD. | select превращает объект только в пользовательский объект с выбранными свойствами, но не в плоскую строку. | Out-String однако это так. Вы можете проверить сами: сравните $body.GetType() и ($body | Out-String).GetType()