2015-01-26 3 views
2

Я прочел здесь файлы справки и не могу найти правильную комбинацию того, что я ищу.Смешивание SQL-запроса и PowerShell send-mailmessage

Кому-то до моего времени создан сценарий PowerShell, который используется для создания учетных записей пользователей в Active Directory. В настоящее время, когда запрашивается новая учетная запись, администратор (я) запускает скрипт, который создает учетную запись AD, а затем возвращается к веб-форме, чтобы ввести имя пользователя/пароль (также сгенерированный этим скриптом), чтобы закрыть запрос , Закрытие его через форму также отправляет электронное письмо запрашивающему и двум системным администраторам с именем пользователя и паролем в нем.

Потому что глупо копировать/вставлять что-либо, я успешно добавил командлеты в сценарий, чтобы написать имя пользователя, пароль и другие данные обратно в таблицу SQL напрямую и закрыть билет. Я также успешно добавил командлет send-mailmessage, чтобы сгенерировать это имя пользователя/pswd. Моя проблема возникает, когда мне нужно искать (через SQL-запрос) и отправлять на адрес электронной почты исходного запроса. Форма запроса фиксирует идентификатор пользователя запрашивающего, который затем я использую запрос, чтобы найти свой адрес электронной почты из другой таблицы и определить его как переменную.

$ запрашивающий = Invoke-Sqlcmd -ServerInstance [имя_сервера] -Database [имя_бд] -QUERY «выберите b.email из [Table1] левое внешнее соединение [таблица2] б на a.requestedby = Ь. clockid, где a.accrequestid = '$ reqID' "

Здесь могут возникнуть две проблемы. Когда я определяю эту переменную и затем введите $ запрашивающего для выхода, я получаю

PS SQLServer:> $ запрашивающий

электронной
[[email protected]]

мне может понадобиться найти способ определить эту переменную как только значение адреса электронной почты без заголовка поля, и я не уверен, как это сделать. (Я очень новичок в PowerShell.)

Другая проблема заключается в использовании этой переменной как части массива. В настоящее время мой посыла MailMessage Командлет выглядит примерно так:

$ PSEmailServer = "[SMTPServerName]" Send-MailMessage -из "[EmailAddress]" -Чтобы "[email protected]", «email2 @ abc.com "," $ requestor "-Subject" Пользователь Информация об учетной записи ($ DisplayName) "-Body" Создана учетная запись пользователя, которую вы запросили . "

Электронная почта доставит EMAIL1 и email2, но я получаю эту ошибку с использованием переменной:

Send-MailMessage: Указанная строка не в форме требуется для е -Почта Адрес. В [FileName] .ps1: 381 char: 1 + Send-MailMessage -From "[email protected]" -Для "$ requestor" -Subject ... + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidType: (:) [Send-MailMessage], FormatException + FullyQualifiedErrorId: FormatException, Microsoft.PowerShell.Commands.SendMailMessage

Я пробовал все комбинации одиночных, двойных и без кавычек вокруг этой переменной $ requestor и пытался отправить только адрес, возвращаемый переменной. Не повезло.

Есть ли у кого-нибудь опыт в этом? Я знаю, что я мог бы создать триггер в таблице SQL для отправки электронной почты вместо этого, но мне бы хотелось выяснить, в чем проблема. Я предполагаю, что это первая проблема ...

Большое спасибо!

(База данных SQL2008R2 и PowerShell является v4.)

ответ

0

$requestor будет содержать запись SQL в качестве объекта. Когда вы выбираете столбец email в своем запросе, это, вероятно, будет массив адресов электронной почты.

Вы можете проверить, что такое объект $requestor, набрав $requestor.GetType() в приглашении PowerShell.

Однако, на догадку, я предположил бы, что вам нужно использовать:

($requestor.email)[0] в вашей команде Send-MailMessage, чтобы получить доступ к строке свойства возвращаемого объекта или создать переменную для запрашивающей адрес электронной почты, делая что-то вроде:

$reqEmail = $requestor | Select-Object -ExpandProperty email -First 1 
+0

Это было! Спасибо огромное! (Я использовал ваше второе предложение, определяя переменную для адреса электронной почты для запроса). – ColleenH218