Назад | Перейти на главную страницу

Как проверить, может ли Outlook подключиться к Exchange из скрипта?

Есть ли способ проверить, может ли Outlook успешно подключиться к Exchange из Powershell? Я хотел бы запланировать этот сценарий для ведения журнала.

После некоторых исследований мне удалось приготовить следующее:

$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 и тому подобное.

PS: Скажите, пожалуйста, если вопрос больше подходит для superuser.com, я перенесу его туда, если потребуется.

Наконец-то понял. Оказывается, добавление еще одного «Start-Sleep -s 5» после запроса папки «Входящие» решает проблему. Похоже, сценарий выполнялся слишком быстро для Outlook.

Я думаю, что «$ session.ExchangeConnectionMode.ToString ()» вернет константу OlExchangeConnectionMode, которая указывает режим подключения основной учетной записи Exchange пользователя. Это может быть «800», «300» или другие.

Вы можете попробовать использовать «500», «600», «700», «800» в качестве $ validStates. Вот ссылка. https://docs.microsoft.com/en-us/office/vba/api/outlook.olexchangeconnectionmode