2014-08-28 23:08:40
来 源
中存储网
Exchange邮件服务器
在Exchange 2007/2010客户端访问服务器上,需要正确设置Exchange服务的URL,以便产生正确的AutoDiscover配置信息。

前面的文章中提到,如果要保证Outlook客户端的正常连接,在Exchange 2007/2010客户端访问服务器上,需要正确设置Exchange服务的URL,以便产生正确的AutoDiscover配置信息。

在安装Exchange 2010 CAS服务器角色时,安装程序会询问该服务器在Internet上被访问时使用的FQDN名称,并且会自动使用该名称为CAS上所有的基于IIS的服务配置ExternalURL属性,这些服务包括:Outlook Web App、Exchange Control Panel、ActiveSync、Offline Address Book、Exchange Web Service、AutoDiscover等,并且在启用Outlook Anywhere功能时,会再次询问FQDN名称。因此,在Exchange 2010中,基本上不需要专门关心这些服务的ExternalURL是否正确。这是与Exchange 2007相比很大的改进。

但是在Exchange 2010的使用过程中,依然可能遇到需要对URL进行修改的情况,此时管理员就需要手动通过Exchange Management Console及Exchange Management Shell对配置进行调整。需要依次设置AutoDiscover/OWA/ECP/OAB/WebServices/ActiveSync等。下面这个脚本可以一次性为一台Exchange Server 2010的客户端访问服务器设置这些服务器的InternalURL和ExternalURL值。

这个脚本需要3个参数:

参数名称 说明 示例
CASServer 客户端访问服务器实际的机器名 pcoeexchhtcas1
ExternalFqdn 用于外部访问的FQDN,如果设为$None,会将所有服务的ExternalURL置空。
并且,会根据是否设置了该参数来进行OutlookAnywhere功能的启用或禁用
cas.pcoe.com
InternalNameorFqdn 用于内部访问的FQDN或服务器名。如果未提供该参数,会默认使用CASServer的值。 cas

#Begin of script file
#SetCASUrl.ps1
#Author: George Wu
#Usage: .Set-CASUrl.ps1 -CASServer <SERVERNAME> [-ExternalFqdn <Internet Fqdn>] [-InternalNameorFqdn <NetBIOSNameOrInternalFqdn>]
#Sample:.Set-CASUrl.ps1 -CASServer pcoeexchhtcas1 -ExternalFqdn cas.pcoe.com -InternalNameorFqdn cas
#Note:
#1.If InternalNameorFqdn is omitted, CASServer will be used
#2.If ExternalFqdn is omitted, external connection will be disabled

Param(
[string] $CASServer,# = $(throw “Usage: .Set-CASUrl.ps1 -CASServer <SERVERNAME> [-ExternalFqdn <Internet Fqdn>] [-InternalNameorFqdn <NetBIOSNameOrInternalFqdn>]“),
[string] $ExternalFqdn = “$None”,
[string] $InternalNameorFqdn = “$None”
)

if($CASServer -eq “”)
{
$CASServer = Read-Host “Client Access Server Name”
}
if($CASServer -eq “”)
{
exit
}

if($InternalNameorFqdn -eq “”)
{
$InternalNameorFqdn = $CASServer
}

$Msg = “Script is about to change configurations on server ” + $CASServer + ” with following paramenters:”
Write-Host $Msg
$Msg = “CASServer: ” + $CASServer
Write-Host $Msg
$Msg = “ExternalFqdn: ” + $ExternalFqdn
Write-Host $Msg
$Msg = “InternalNameorFqdn: ” + $InternalNameorFqdn
Write-Host $Msg

$Msg = “Configuration of server ” + $CASServer + ” will be changed.”
Write-Warning $Msg -warningaction Inquire

$InternalBase = “https://” + $InternalNameorFqdn + “/”
$ExternalBase = “https://” + $ExternalFqdn + “/”

#
$InternalUrl = $InternalBase + “owa”
if($ExternalFqdn -eq “”)
{
Get-OWAVirtualDirectory -Server $CASServer | Set-OWAVirtualDirectory -ExternalUrl $None -InternalUrl $InternalUrl -WindowsAuthentication $true -FormsAuthentication $false
}
else
{
$ExternalUrl = $ExternalBase + “owa”
Get-OWAVirtualDirectory -Server $CASServer | Set-OWAVirtualDirectory -ExternalUrl $ExternalUrl -InternalUrl $InternalUrl -WindowsAuthentication $false -FormsAuthentication $true
}
Get-OWAVirtualDirectory -Server $CASServer | select name,InternalUrl,ExternalUrl

#
$InternalUrl = $InternalBase + “ecp”
if($ExternalFqdn -eq “”)
{
Get-EcpVirtualDirectory -Server $CASServer | Set-EcpVirtualDirectory -ExternalUrl $None -InternalUrl $InternalUrl -WindowsAuthentication $true -FormsAuthentication $false
}
else
{
$ExternalUrl = $ExternalBase + “ecp”
Get-EcpVirtualDirectory -Server $CASServer | Set-EcpVirtualDirectory -ExternalUrl $ExternalUrl -InternalUrl $InternalUrl
}
Get-EcpVirtualDirectory -Server $CASServer | select name,InternalUrl,ExternalUrl

#
$InternalUrl = $InternalBase + “oab”
if($ExternalFqdn -eq “”)
{
Get-OABVirtualDirectory -Server $CASServer | Set-OABVirtualDirectory -ExternalUrl $None -InternalUrl $InternalUrl
}
else
{
$ExternalUrl = $ExternalBase + “oab”
Get-OABVirtualDirectory -Server $CASServer | Set-OABVirtualDirectory -ExternalUrl $ExternalUrl -InternalUrl $InternalUrl
}
Get-OABVirtualDirectory -Server $CASServer | select name,InternalUrl,ExternalUrl

#
$InternalUrl = $InternalBase + “ews/exchange.asmx”
if($ExternalFqdn -eq “”)
{
Get-WebServicesVirtualDirectory -Server $CASServer | Set-WebServicesVirtualDirectory -ExternalUrl $None -InternalUrl $InternalUrl
}
else
{
$ExternalUrl = $ExternalBase + “ews/exchange.asmx”
Get-WebServicesVirtualDirectory -Server $CASServer | Set-WebServicesVirtualDirectory -ExternalUrl $ExternalUrl -InternalUrl $InternalUrl
}
Get-WebServicesVirtualDirectory -Server $CASServer | select name,InternalUrl,ExternalUrl

#
$InternalUrl = $InternalBase + “Microsoft-Server-ActiveSync”
if($ExternalFqdn -eq “”)
{
Get-ActiveSyncVirtualDirectory -Server $CASServer | Set-ActiveSyncVirtualDirectory -ExternalUrl $ExternalUrl -InternalUrl $InternalUrl
}
else
{
$ExternalUrl = $ExternalBase + “Microsoft-Server-ActiveSync”
Get-ActiveSyncVirtualDirectory -Server $CASServer | Set-ActiveSyncVirtualDirectory -ExternalUrl $ExternalUrl -InternalUrl $InternalUrl
}
Get-ActiveSyncVirtualDirectory -Server $CASServer | select name,InternalUrl,ExternalUrl

#
$InternalUrl = $InternalBase + “autodiscover/autodiscover.xml”
Set-ClientAccessServer $CASServer -AutodiscoverServiceInternalUri $InternalUrl
Get-ClientAccessServer $CASServer | select AutodiscoverServiceInternalUri

#
$ServerStatus = Get-ClientAccessServer $CASServer
if($ExternalFqdn -eq “”)
{
if($ServerStatus.OutlookAnywhereEnabled -eq $true)
{
Disable-OutlookAnywhere -Server $CASServer -Confirm
}
}
else
{
if($ServerStatus.OutlookAnywhereEnabled -eq $false)
{
Enable-OutlookAnywhere -Server $CASServer -ExternalHostname $ExternalFqdn -DefaultAuthenticationMethod ‘Basic’ -SSLOffloading $false -Confirm
}
}
Write-Warning “Attempting to restart IIS service on CAS server remotely… …”
.psexec.exe \$CASServer iisreset

#end of script file

其中的psexec.exe 是System Internal公司提供的一个程序,可以远程运行指定的程序。这个脚本里利用该程序到远程客户端访问服务器上进行IISRESET工作。如果不使用这个程序,可以登录到客户端访问服务器上,手动运行IISRESET。

psexec.exe可以从以下位置下载:

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

广告时间:
System Internal中有许多有趣的小工具,例如其中的BGInfo工具,在配置多台服务器时十分有用。
有兴趣可以访问以下站点,可能有意想不到的收获:http://technet.microsoft.com/en-us/sysinternals

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。