如果outlook已在运行,则使用powershell在outlook中发送电子邮件而不锁定

如果outlook已在运行,则使用powershell在outlook中发送电子邮件而不锁定,powershell,outlook,Powershell,Outlook,我有以下计划: Function Email{ param ($to, $Subject, $Body, $Attachment) if($process=(get-process 'outlook')) { kill($process) Stop-Process $process -Force #$namespace = $outlook.GetNameSpace("MAPI") #$namespace.Logon("ou

我有以下计划:

Function Email{
  param ($to, $Subject, $Body, $Attachment)

    if($process=(get-process 'outlook'))
    {
      kill($process)
      Stop-Process $process -Force
      #$namespace = $outlook.GetNameSpace("MAPI") 
      #$namespace.Logon("outlook")
    }

    $Outlook = New-Object -Com Outlook.Application
    $session = $outlook.Session
    $session.Logon("Outlook")

    $Mail = $Outlook.CreateItem(0)

    foreach ($person in $to){
      $Mail.Recipients.add($person)
    }

    $Mail.Subject = $Subject
    $Mail.Body = $Body
    $Mail.Attachments.Add($Attachment)
    $Mail.Send()
}
在ISE和批量测试时,其功能与预期一致。但是,在另一个powershell脚本中使用时,它会随机导致脚本挂起,并且由于多个实例的错误,我无法手动打开outlook

我如何重新编写它以正确地解释outlook正在运行的实例(或者至少不会导致使用它的脚本挂起)

更新:我也尝试过,因为:

Function Email{
    param ($to, $Subject, $Body, $Attachment)

    $Creds = Import-CliXml c:\localdata\cred.clixml
    $username= myemail
    Send-MailMessage -To $to -subject $Subject -body $Body -Attachment $Attachment -UseSsl -Port 587 -SmtpServer smtp.office365.com -From $username -Credential $creds
}
我无法通过“无法连接到远程服务器”错误


运行telnet smtp.office365.com 587或telnet smtp.office365.com 25似乎不会返回任何内容

要诊断并正确处理错误,可以使用try..catch语句,这样脚本就不会在出现错误时失败并停止。使用自动
$error
变量并输出到catch语句中的文本文件以获取错误。根据我的经验,使用MS Office COM对象可能非常不可靠。您是否考虑过使用其他方法发送电子邮件,如
发送邮件消息
?@robliv请查看更新您是否在公司网络上工作?内政部?您的计算机上是否安装了防病毒软件?@vonPryz位于受McAfee保护的公司网络上。那么McAfee可能会阻止未经授权的SMTP连接。这是一种常见的配置,可防止僵尸网络使用您的工作站发送垃圾邮件或更糟的信息。此时,请与您的IT部门联系并与他们合作以获得解决方案。要诊断并正确处理错误,您可以使用try..catch语句,这样脚本就不会在出现错误时失败并停止。使用自动
$error
变量并输出到catch语句中的文本文件以获取错误。根据我的经验,使用MS Office COM对象可能非常不可靠。您是否考虑过使用其他方法发送电子邮件,如
发送邮件消息
?@robliv请查看更新您是否在公司网络上工作?内政部?您的计算机上是否安装了防病毒软件?@vonPryz位于受McAfee保护的公司网络上。那么McAfee可能会阻止未经授权的SMTP连接。这是一种常见的配置,可防止僵尸网络使用您的工作站发送垃圾邮件或更糟的信息。此时,请联系您的IT部门并与他们合作以获得解决方案。