我遇到了 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 控制台或通过打包的批处理文件执行上述脚本时 - 没有收到邮件。
非常感谢您对此的任何帮助。提前致谢!
问候-Raaj