我目前正在编写Powershell脚本,该脚本可对服务器执行ping操作,如果无法建立连接,则会向IT部门发送电子邮件以手动重新启动服务器。
现在,当ping操作不成功并且该对象具有属性值时,脚本可以成功发送电子邮件,该属性值应评估为“ True”,但我无法验证,因为发送电子邮件后,该变量将自身删除,因此该属性不再存在。
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "<recipient>"
$Mail.Cc = "<some_cc>"
$Mail.Send()
# After this line, the variable is deleted!
if ($Mail.Sent())
# The line which is supposed to work, but evaluates to False everytime
如何确保在我可以验证交换之前该变量仍然存在?
答案 0 :(得分:1)
该变量在Send方法之后将无法生存,也将不会返回任何值。 您正在将实际的发送操作委派给Outlook,因此您需要检查Outlook应用程序是否存在错误(即退回)。
如果不需要通过Outlook发送,则可以通过
使用更多选项try {
Send-MailMessage -From 'monitoring@example.com' -To 'ITdesk@example.com' -Subject 'test' -Body 'whatever' -Priority High -DeliveryNotificationOption OnSuccess, OnFailure -SmtpServer 'mail.example.com' -ErrorAction stop -Port 25
}
catch{
write-warning "error in sending. $_"
}
请注意,如果您需要通过身份验证的发送,则可以通过-credential参数指定保存的凭据。
答案 1 :(得分:0)
您可以将mail.send()放在try / catch块中。这样,如果有任何错误或成功,它将输出。另外,不需要其他变量。
try{
mail.send()
write-host "success"
}catch{
write-host "fail"
}