混合SQL查询和PowerShell send-mailmessage

时间:2015-01-26 17:04:03

标签: sql-server powershell

我已经在这里梳理了帮助文件,并且无法找到我正在寻找的正确组合。

在我的时间之前,有人创建了一个用于在Active Directory中创建用户帐户的PowerShell脚本。目前,当请求新帐户时,admin(me)运行创建AD帐户的脚本,然后返回基于Web的表单以输入用户名/密码(也由该脚本生成)以关闭请求。通过表单关闭它还会向请求者和两个系统管理员发送一封电子邮件,其中包含用户名和密码。

因为要复制/粘贴任何内容都很愚蠢,我已成功将cmdlet添加到脚本中,直接将用户名,密码和其他数据写回SQL表并关闭该票证。我还成功添加了send-mailmessage cmdlet来生成该用户名/ pswd电子邮件。当我需要查找(通过SQL查询)并发送到原始请求者的电子邮件地址时,我的问题就来了。请求表单捕获请求者的用户ID,然后我使用查询从另一个表中查找他们的电子邮件地址并将其定义为变量。

  

$ requestor = Invoke-Sqlcmd -ServerInstance [servername] -Database [dbname] -Query   "从[表1]中选择左外连接的b.email   [表2] b在a.requestedby = b.clockid其中   a.accrequestid =' $ reqID'"

这里有两件事可能会引起问题。当我定义该变量然后输入$ requestor作为输出时,我得到

  

PS SQLSERVER:> $请求者

     

电子邮件
  [email@abc.com]

我可能需要找到一种方法来将该变量定义为没有字段标题的电子邮件地址值,我不知道该怎么做。 (我对PowerShell来说很新。)

另一个问题是将该变量用作数组的一部分。目前,我的send-mailmessage cmdlet看起来有点像这样:

  

$ PSEmailServer =" [SMTPServerName]" Send-MailMessage -From   " [EmailAddress的]" -To" email1@abc.com" ;," email2@abc.com" ;," $ requestor" - 主题"用户   帐户信息($ DisplayName)" -Body"您请求的用户帐户   已创建。"

电子邮件将发送到email1和email2,但我从使用变量时收到此错误:

  

Send-MailMessage:指定的字符串不是所需的格式   用于电子邮件地址。在[FileName] .ps1:381 char:1   + Send-MailMessage -From" onlinenotification@foley.com" -To" $ requestor" -学科 ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidType :( :) [Send-MailMessage],FormatException       + FullyQualifiedErrorId:FormatException,Microsoft.PowerShell.Commands.SendMailMessage

我已尝试围绕该$ requestor变量的单引号,双引号和无引号的所有组合,并尝试仅发送变量返回的地址。没有运气。

有没有人有这样的经历?我知道我可以在SQL表上创建一个触发器来发送电子邮件,但我很想知道这里的问题是什么。我的猜测是它是前一个问题...

非常感谢!

(数据库是SQL2008R2,PowerShell是v4。)

1 个答案:

答案 0 :(得分:0)

$requestor将包含SQL记录作为对象。当您在查询中选择email列时,这可能是一组电子邮件地址。

您可以在PowerShell提示符下键入$requestor来检查$requestor.GetType()对象的内容。

然而,我猜想你需要使用:

($requestor.email)[0]命令中的

Send-MailMessage访问返回对象的字符串属性,或者通过执行以下操作为请求者电子邮件地址创建变量:

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