2017-02-20 21 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, вы можете быть в состоянии получить ваш почтовый сервер таким образом.

$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 и да - почтовый ящик находится не на одном сервере –