#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()