sql-server - 混合使用SQL查询和PowerShell send-mail消息

标签 sql-server powershell

我在这里浏览了所有帮助文件,但找不到我想要的东西的正确组合。

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

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

$requestor = Invoke-Sqlcmd -ServerInstance [servername] -Database [dbname] -Query "select b.email from [Table1] a left outer join [Table2] b on a.requestedby = b.clockid where a.accrequestid = '$reqID'"



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

PS SQLSERVER:> $requestor

email
[email@abc.com]



我可能需要找到一种方法来将该变量定义为仅电子邮件地址值,而不包含字段标题,而且我不确定该怎么做。 (我是PowerShell的新手。)

另一个问题是将该变量用作数组的一部分。目前,我的send-mailmessage cmdlet如下所示:

$PSEmailServer = "[SMTPServerName]" Send-MailMessage -From "[EmailAddress]" -To "email1@abc.com", "email2@abc.com", "$requestor" -Subject "User Account Info ($DisplayName)" -Body "The user account you requested has been created."



电子邮件将传递到email1和email2,但是我通过使用变量得到此错误:

Send-MailMessage : The specified string is not in the form required for an e-mail address. At [FileName].ps1:381 char:1 + Send-MailMessage -From "onlinenotification@foley.com" -To "$requestor" -Subject ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidType: (:) [Send-MailMessage], FormatException + FullyQualifiedErrorId : FormatException,Microsoft.PowerShell.Commands.SendMailMessage



我尝试过在$ requestor变量周围使用单引号,双引号和无引号的所有组合,并尝试仅发送到变量返回的地址。没运气。

有人对这样的事情有经验吗?我知道我可以在SQL表上创建触发器以代替发送电子邮件,但是我很想弄清楚问题出在哪里。我的猜测是这是前一个问题...

非常感谢!

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

最佳答案

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

您可以通过在PowerShell提示符下键入$requestor来检查$requestor.GetType()对象是什么。

但是,我猜想您需要使用:
($requestor.email)[0]命令中的Send-MailMessage可以通过以下操作来访问返回对象的字符串属性或为请求者的电子邮件地址创建变量:

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

关于sql-server - 混合使用SQL查询和PowerShell send-mail消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28155012/

相关文章:

sql-server - Sequelize Query,多对多关系问题

Powershell:将单个数组组合成列

sql - 登录失败。用户 'NT AUTHORITY\NETWORK 登录失败

sql-server - 是否可以强制SQL Server使用我想要优化递归cte查询的计划

powershell - 如何在 powershell 中排序后打印文件的第一行而不显示最后一个值?

forms - Powershell:While循环卡住形式

regex - Powershell -match “Cannot index into a null array”

Azure powershell : find which principal created or modified a given principal

sql-server - 我们是否必须在 SQL Server 托管实例连接字符串中使用故障转移组服务器名称或主服务器名称

.net - SqlCommand查询的长度有什么限制