Powershell

如何檢查 Outlook 是否可以從腳本連接到 Exchange?

  • April 30, 2019

有什麼方法可以檢查 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 之類的。

PS:請告訴我這個問題是否更適合 superuser.com,如果需要,我會將它移到那裡。

終於弄對了。原來在查詢收件箱後添加另一個“Start-Sleep -s 5”可以解決問題。對於 Outlook,該腳本似乎執行得太快了。

我認為“$session.ExchangeConnectionMode.ToString()”會返回一個指示使用者主要 Exchange 帳戶的連接模式的 OlExchangeConnectionMode 常量。就像“800”、“300”或其他。

您可以嘗試使用“500”、“600”、“700”、“800”作為 $validStates 。這是一個參考。 https://docs.microsoft.com/en-us/office/vba/api/outlook.olexchangeconnectionmode

引用自:https://serverfault.com/questions/964515