我正面临着Powershell脚本的异常问题。我编写了运行DBOR查询的脚本来运行一个STORED过程。以下是完整的脚本:
$server="DBServer,Inst"
$Database = "DATABASE"
$ConnectionTimeout = 30
$QueryTimeout = 120
$Query="STORED_PROCEDURE"
Import-Module “sqlps” -DisableNameChecking
$ds=Invoke-Sqlcmd -Query $Query -Database $Database -ServerInstance $server -ConnectionTimeout $ConnectionTimeout -QueryTimeout $QueryTimeout
$date=(Get-Date).ToString()
$ret=$ds.Return
- 查询返回0或1,0表示SP通过,否则失败。
$From="abc@xyz.com"
$SendCC= "aabbcc.b@xyz.com"
If ($ret -eq '0')
{
$Body=" STORED_PROCEDURE: <FONT COLOR=#00FF00> <b>PASS </b> </FONT> in <b> $server</b>:<i>$Database</i>; TimeStamp: $date"
$msg="Test: STORED_PROCEDURE - SUCCESS "
Write-Host "Sending Mail Notification - Ret 0"|
Send-MailMessage -From $From -To $SendCC -Subject $msg ($Body |Out-String) -BodyAsHtml -SmtpServer mail.xyz.com
Write-Host "Notification Sent!!"
}
这个脚本在xyz域中的计算机上运行得非常好。我创建了批处理文件来运行此脚本:
@pushd "D:\Temp\SM_SP"
powershell -ExecutionPolicy Bypass -File .\SP_SM.ps1 -noconsole
@popd
即使这个批处理文件在我的计算机上工作正常,也可以发送邮件..按预期工作!但真正的问题是在其中一个测试服务器上运行(赢得Ser 2008 R2)。手动执行批处理文件时返回没有错误 - 但是我没有收到任何邮件通知。
注意 - •我在脚本中提到了正确的smtp服务器详细信息,因为我说同一个脚本和批处理在我的计算机上工作正常,该计算机与此服务器位于同一个域中。 •我在服务器中测试了Powershell内置命令“Send-MailMessage”:
Send-MailMessage -From $from -To $to -Subject Test -SmtpServer mail.xyz.com
$ from和$ to both是我的地址,我收到的邮件绝对没问题。但是在服务器中我在Powershell控制台中执行上述脚本或通过包装批处理文件 - 我没有收到邮件。
非常感谢任何帮助。提前谢谢!
此致 -Raaj
答案 0 :(得分:0)
由于Exchange中的接收连接器设置,我多次遇到此问题。我们通常只会添加服务器的IP以允许它在我们将开始使用它来发送电子邮件时进行中继,否则我们希望连接被拒绝。
如果您正在使用Exchange,请转到“服务器配置” - >“集线器传输”,并检查“网络”选项卡上“从具有这些IP地址的远程服务器接收邮件”下列出的内容。如果您正在使用其他一些邮件服务器,我会参考有关它的连接权限的文档。此外,如果您在服务器上使用的用户帐户不同于在桌面上使用的用户帐户,则可能需要尝试以不同用户身份运行,并查看是否具有您在服务器上使用的帐户的权限。