混合 SQL 查询和 PowerShell send-mailmessage
Mixing SQL query and PowerShell send-mailmessage
我已经仔细阅读了此处的帮助文件,但无法完全找到我要查找的内容的正确组合。
在我之前有人创建了一个 PowerShell 脚本,用于在 Active Directory 中创建用户帐户。当前,当请求新帐户时,管理员(我)运行创建 AD 帐户的脚本,然后返回到 Web-based 表单以输入用户 name/password(也由该脚本生成)关闭请求。通过表单关闭它还会向请求者和两个系统管理员发送一封电子邮件,其中包含用户名和密码。
因为必须 copy/paste 任何东西都是愚蠢的,我已经成功地向脚本添加了 cmdlets 将用户名、密码和其他数据直接写回 SQL table并关闭工单。我还成功添加了 send-mailmessage cmdlet 来生成该用户 name/pswd 电子邮件。当我需要查找(通过 SQL 查询)并发送到原始请求者的电子邮件地址时,我的问题就来了。请求表单捕获请求者的用户 ID,然后我使用查询从另一个 table 找到他们的电子邮件地址并将其定义为变量。
$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]
我可能需要找到一种方法将该变量定义为不带字段 header 的电子邮件地址值,但我不确定该怎么做。 (我是 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 table 上创建一个触发器来发送电子邮件,但我很想弄清楚这里的问题是什么。我猜是前一期...
非常感谢!
(数据库为SQL2008R2,PowerShell为v4。)
$requestor
将包含 SQL 记录作为对象。当您在查询中选择 email
列时,这可能是一组电子邮件地址。
您可以通过在 PowerShell 提示符下键入 $requestor.GetType()
来检查 $requestor
对象是什么。
但是,我猜想您需要使用:
($requestor.email)[0]
在您的 Send-MailMessage
命令中访问返回对象的字符串 属性 或通过执行以下操作为请求者电子邮件地址创建一个变量:
$reqEmail = $requestor | Select-Object -ExpandProperty email -First 1
我已经仔细阅读了此处的帮助文件,但无法完全找到我要查找的内容的正确组合。
在我之前有人创建了一个 PowerShell 脚本,用于在 Active Directory 中创建用户帐户。当前,当请求新帐户时,管理员(我)运行创建 AD 帐户的脚本,然后返回到 Web-based 表单以输入用户 name/password(也由该脚本生成)关闭请求。通过表单关闭它还会向请求者和两个系统管理员发送一封电子邮件,其中包含用户名和密码。
因为必须 copy/paste 任何东西都是愚蠢的,我已经成功地向脚本添加了 cmdlets 将用户名、密码和其他数据直接写回 SQL table并关闭工单。我还成功添加了 send-mailmessage cmdlet 来生成该用户 name/pswd 电子邮件。当我需要查找(通过 SQL 查询)并发送到原始请求者的电子邮件地址时,我的问题就来了。请求表单捕获请求者的用户 ID,然后我使用查询从另一个 table 找到他们的电子邮件地址并将其定义为变量。
$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@abc.com]
我可能需要找到一种方法将该变量定义为不带字段 header 的电子邮件地址值,但我不确定该怎么做。 (我是 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 table 上创建一个触发器来发送电子邮件,但我很想弄清楚这里的问题是什么。我猜是前一期...
非常感谢!
(数据库为SQL2008R2,PowerShell为v4。)
$requestor
将包含 SQL 记录作为对象。当您在查询中选择 email
列时,这可能是一组电子邮件地址。
您可以通过在 PowerShell 提示符下键入 $requestor.GetType()
来检查 $requestor
对象是什么。
但是,我猜想您需要使用:
($requestor.email)[0]
在您的 Send-MailMessage
命令中访问返回对象的字符串 属性 或通过执行以下操作为请求者电子邮件地址创建一个变量:
$reqEmail = $requestor | Select-Object -ExpandProperty email -First 1