Powershell
如何檢查 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 之類的。
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