2017-02-20 128 views
0

我想寫下一個PowerShell腳本,它將自動找到郵箱服務器並連接到它(使用URI https://mailboxserver/powershell)。查找郵箱服務器

問題是我沒有找到一種方法來自動檢測給定交換機構的郵箱服務器。我找到了一種如何找到CAS服務器的方法,因爲有人發佈了Outlook如何手動找到它。

我試圖查詢AD,但我不知道哪個屬性是唯一的交換郵箱服務器。

我也試過DNS記錄,但沒有找到有用的幫助。

有沒有人知道可以從AD或GC查詢郵箱服務器的唯一值?或者DNS記錄或其他我沒有想到的東西?

Exchange 2010 如果需要,我可以發佈林和域功能級別,但我正在路上。

在此先感謝

+0

如何確定在有多個連接時要連接哪個郵箱服務器?以前有關CAS的知識是否違反了你想要做的事情? – Matt

+0

這並不重要。如果我會得到一個清單,我會嘗試第一個 –

回答

1

您的AD用戶屬性具有此信息,儘管您必須從它們解析郵箱服務器名稱。

  • HomeMTA
  • 了msExchHomeServerName

所以,如果你有機會到AD的cmdlet,你也許能得到您的郵箱服務器這種方式。

$adUser = get-aduser someuser -Properties msExchHomeServerName 
$mailboxServerName = ($aduser.msExchHomeServerName -split "cn=")[-1] 

這些屬性可以幫助您找到您當前的郵箱託管。在我的情況下,郵箱服務器是msExchHomeServerName中的最後一個「項目」,因此我將字符串拆分爲「cn =」,然後該數組的最後一個元素將成爲我的郵箱服務器名稱。

然後,您可以使用它連接到Exchange會話!

$Credentials = Get-Credential 
$exchangePath = "http://$mailboxServerName/PowerShell/?SerializationLevel=Full" 
$ExSession = New-PSSession –ConfigurationName Microsoft.Exchange –ConnectionUri $exchangePath -Credential $Credentials –Authentication Kerberos 
Import-PSSession $ExSession 
+0

工作,謝謝 –

0

下面的代碼是否能滿足您的需求?它使用EWS - 請參閱我的SO post瞭解EWS的更多詳細信息。

# load the assembly 
[void][Reflection.Assembly]::LoadFile("D:\Temp\Microsoft.Exchange.WebServices.2.2\lib\40\Microsoft.Exchange.WebServices.dll") 

# set ref to exchange - may need to change the version 
$s = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2) 

# replace with your email address 
$email = "[email protected]" 

# grab your own credentials 
$s.UseDefaultCredentials = $true 

# discover the url from your email address 
$s.AutodiscoverUrl($email) 
$s.Url.AbsoluteUri 
+0

首先,感謝您的回覆。我處於封閉的網絡中,因此傳輸安裝是一個問題。我會嘗試,如果沒有其他選項 –

+1

調用此方法應返回自動發現端點:這是在多服務器交換環境通常不是郵箱服務器本身(在很多情況下,這是CAS) – bluuf

+0

哦,很好。正如我所說,我找到了一種方法來發現CAS,是的 - 郵箱不在同一臺服務器上 –