【问题标题】:Running Powershell script from batch - Send-MailMessage not functioning从批处理运行 Powershell 脚本 - Send-MailMessage 不起作用
【发布时间】:2023-03-19 00:56:02
【问题描述】:

我在使用 Powershell 脚本时遇到了不寻常的问题。我编写了脚本来运行运行一个存储过程的数据库查询。以下是完整的脚本:

$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

即使这个批处理文件在我的电脑上也可以正常工作,可以发送邮件。按预期工作!但真正的问题是在其中一台测试服务器(win Ser 2008 R2)中运行相同。手动执行批处理文件时没有返回错误 - 但是我没有收到任何邮件通知。

注意- • 我在脚本中提到了正确的 smtp 服务器详细信息,因为我说过相同的脚本和批处理在我的计算机上运行良好,该计算机与此服务器位于同一域中。 • 我在服务器中测试了Powershell 内置命令“Send-MailMessage”:

Send-MailMessage -From $from -To $to -Subject Test -SmtpServer mail.xyz.com

$from 和 $to 都是我的地址,并且我收到邮件绝对没问题。但是在服务器中,当我在 Powershell 控制台或通过打包的批处理文件执行上述脚本时 - 没有收到邮件。

非常感谢您对此的任何帮助。提前致谢!

问候 -拉杰

【问题讨论】:

  • 我认为可以公平地说批处理文件与问题无关,因为您说直接从 Powershell 控制台执行 PS 脚本时遇到了同样的问题。要将问题归结为本质,您可以从问题和标题等中完全删除批处理代码。您还可以删除存储过程代码,因为这与无法发送电子邮件无关。我知道到目前为止我还没有帮助回答你的问题,但是一个更短更集中的问题会邀请更多的答案。 :-)
  • 不,我想我理解错了。在重新阅读时,我认为您的意思是:在服务器上,您可以从 powershell 控制台Send-MailMessage -From "you@yourdomain.com" -To "you@yourdomain.com" -Subject Test -StmpServer mail.xyz.com,它确实工作。但是,如果您将完全相同的命令放在脚本 (.ps1) 中并运行该脚本,它就不起作用。然而,在您自己的计算机上,无论是直接运行还是通过脚本运行,它都可以工作。 对吗?
  • 是.. 在服务器中,从 powershell 控制台发送邮件消息正在工作,但从 .ps1 保存和执行时没有
  • 当它不起作用时,您没有收到任何错误消息吗?它似乎运行良好,但您从未收到电子邮件?
  • 当执行策略由组策略定义时,我遇到过这种行为。您可以通过rsop.msc查看应用的组策略。

标签: powershell batch-file sendmail


【解决方案1】:

由于 Exchange 中的接收连接器设置,我多次遇到此问题。如果我们要开始使用它来发送电子邮件,我们通常只会添加服务器的 IP 以允许它进行中继,否则我们希望连接被拒绝。

如果您使用 Exchange,请转到服务器配置->集线器传输并检查您在“网络”选项卡上的“从具有这些 IP 地址的远程服务器接收邮件”下列出的内容。如果您使用的是其他邮件服务器,我会参考有关它的连接权限的文档。此外,如果您在服务器上使用的用户帐户与在桌面上使用的用户帐户不同,您可能需要尝试以不同用户身份运行,看看它是否具有您在服务器上使用的帐户的权限。

【讨论】:

    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2013-07-30
    • 2013-10-20
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多