寻找邮箱服务器
Finding mailbox server
我正在尝试写一个 powershell 脚本,它会自动找到邮箱服务器并连接到它(使用 URI https://mailboxserver/powershell)。
问题是我还没有找到自动检测给定交换组织的邮箱服务器的方法。我找到了一种查找 CAS 服务器的方法,因为有人post了解了 outlook 是如何手动找到它的。
我尝试查询 AD 但我不知道哪个属性是 exchange 邮箱服务器独有的。
我也尝试了 DNS 记录,但发现 none 这有帮助。
有谁知道可以从AD或GC查询到邮箱服务器的唯一值吗?还是 DNS 记录或其他我没有想到的东西?
交流 2010
如有必要,我可以 post 林和域功能级别,但我正在路上。
提前致谢
下面的代码能满足您的需求吗?它使用 EWS - 有关 EWS 的更多详细信息,请参阅我的 。
# load the assembly
[void][Reflection.Assembly]::LoadFile("D:\Temp\Microsoft.Exchange.WebServices.2.2\lib\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 = "your.email@domain.com"
# grab your own credentials
$s.UseDefaultCredentials = $true
# discover the url from your email address
$s.AutodiscoverUrl($email)
$s.Url.AbsoluteUri
您的 AD 用户属性具有此信息,尽管您必须从中解析邮箱服务器名称。
- HomeMTA
- msExchHomeServerName
因此,如果您有权访问 AD cmdlet,您也许可以通过这种方式获取邮箱服务器。
$adUser = get-aduser someuser -Properties msExchHomeServerName
$mailboxServerName = ($aduser.msExchHomeServerName -split "cn=")[-1]
这些属性可帮助您找到您当前的邮箱托管。在我的例子中,邮箱服务器是 msExchHomeServerName
中的最后一个 "item",因此我将字符串拆分为 "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
我正在尝试写一个 powershell 脚本,它会自动找到邮箱服务器并连接到它(使用 URI https://mailboxserver/powershell)。
问题是我还没有找到自动检测给定交换组织的邮箱服务器的方法。我找到了一种查找 CAS 服务器的方法,因为有人post了解了 outlook 是如何手动找到它的。
我尝试查询 AD 但我不知道哪个属性是 exchange 邮箱服务器独有的。
我也尝试了 DNS 记录,但发现 none 这有帮助。
有谁知道可以从AD或GC查询到邮箱服务器的唯一值吗?还是 DNS 记录或其他我没有想到的东西?
交流 2010 如有必要,我可以 post 林和域功能级别,但我正在路上。
提前致谢
下面的代码能满足您的需求吗?它使用 EWS - 有关 EWS 的更多详细信息,请参阅我的
# load the assembly
[void][Reflection.Assembly]::LoadFile("D:\Temp\Microsoft.Exchange.WebServices.2.2\lib\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 = "your.email@domain.com"
# grab your own credentials
$s.UseDefaultCredentials = $true
# discover the url from your email address
$s.AutodiscoverUrl($email)
$s.Url.AbsoluteUri
您的 AD 用户属性具有此信息,尽管您必须从中解析邮箱服务器名称。
- HomeMTA
- msExchHomeServerName
因此,如果您有权访问 AD cmdlet,您也许可以通过这种方式获取邮箱服务器。
$adUser = get-aduser someuser -Properties msExchHomeServerName
$mailboxServerName = ($aduser.msExchHomeServerName -split "cn=")[-1]
这些属性可帮助您找到您当前的邮箱托管。在我的例子中,邮箱服务器是 msExchHomeServerName
中的最后一个 "item",因此我将字符串拆分为 "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