帮酷LOGO
0 0 评论


问题:

是否有办法检查 Outlook 是否能成功地从 PowerShell 连接到 Exchange? 目的是,我想计划做个脚本用来做日志。

经过一些研究,我成功地完成了以下工作:

$outlook = New-Object -ComObject Outlook.Application
Start-Sleep -s 5
$session = $outlook.session
$inbox = $session.GetDefaultFolder([Microsoft.Office.Interop.Outlook.olDefaultFolders]::olFolderInbox)
$date = Get-Date
If ($session.Offline) {
 $output ="Fail, mode $($session.ExchangeConnectionMode.ToString())"
} Else {
 $output ="Success"
}
"[$date] $output `n" | Out-File -Append"$HOMEol_log.txt" -Encoding"UTF8"
$outlook.Quit()

即使我拉电缆,也会写入“Success ”。 经过检查,我发现的另一种方法是

$validStates ="olCachedConnectedDrizzle","olCachedConnectedDrizzle","olCachedConnectedHeaders","olOnline"
if ($validStates -contains $session.ExchangeConnectionMode.ToString()) {...}

...总是失败,因为这里的连接模式由于某种原因是olCachedDisconnected。 如果手动打开 Outlook,我可以看到连接是可以的。 所有这一切都发生在内部网络中,所以没有O365等。


回答 1:

我认为\"$session.ExchangeConnectionMode.ToString()\"会返回一个OlExchangeConnectionMode常量,它指示用户交换帐户的主连接模式。 这就像" 800"" 300"其他的。

你可以尝试使用\" 500\",\" 600\",\" 700\",\" 800\"作为 $validStates 。 这里有一个参考。https://docs.microsoft.com/en-us/office/vba/api/outlook.olexchangeconnectionmode


回答 2:

终于明白了。在查询收件箱后解决问题,结果添加另一个“Start-Sleep -s 5 ”。 似乎是脚本对 Outlook 的执行速度太快了





Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语