有什么方法可以检查 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 来说执行得太快了。