2017-02-20 131 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,是的 - 邮箱不在同一台服务器上 –