如何检查 Outlook 是否可以从脚本连接到 Exchange?

如何检查 Outlook 是否可以从脚本连接到 Exchange?

有什么方法可以检查 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 "$HOME\ol_log.txt" -Encoding "UTF8"
$outlook.Quit()

即使我拉动电缆,它也会显示“成功”。我发现的另一种检查方法是

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

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

附言:请告诉我该问题是否更适合 superuser.com,如果需要我会将其移到那里。

答案1

我认为“$session.ExchangeConnectionMode.ToString()”将返回一个 OlExchangeConnectionMode 常量,该常量指示用户主 Exchange 帐户的连接模式。它可能类似于“800”、“300”或其他。

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

答案2

终于搞定了。原来在查询收件箱后再添加一个“Start-Sleep -s 5”就可以解决问题。看来这个脚本对于 Outlook 来说执行得太快了。

相关内容