MSXFAQ MeetNow aktiv: Komm doch einfach dazu.

Copy-CASUrls

Wenn Sie neue Exchange Server in eine bestehende Umgebung installieren, dann addiert das Setup während der Installation die Informationen zu virtuellen Verzeichnissen. Das Setup fragt zu dem Zeitpunkt leider nicht, ob sie schon ein CAS-Array haben oder einen Loadbalancer gibt. Das Setup setzt einfach den FQDN des Servers als Teil der CASURLs und stellt sich ein "Self Signed Zertifikat" aus und die ersten Clients, die per Autodiscover und SCP eine LDAP-Anfrage starten, landen auf dem Server. Selbst wenn Sie Clients weiterhin auf einem alten Server landen, kann dieser doch auch die falschen URLs per Autodiscover ausliefern.

Der einfachste Weg ist daher dem neu installierten Server genau die URLs zu geben, die ein bestehender Exchange Server hat und damit eine Autodiscover-Anfrage immer auf dem schon länger bestehenden Server landet. Wenn Sie von einer älteren Exchange Version als Teil einer Swing-Migration aktualisieren, dann ist dieser Weg meiner Ansicht nach sowieso angesagt. Sie können bei der Nutzung virtueller Servernamen wie "outlook.<firmendomain>" oder beim Einsatz eines Loadbalancers ja später einfach den DNS-Eintrag oder RealServer vom alten auf den neuen Server umlenken.

Das Skript liest einfach die Werte eines bestehenden Servers aus und setzt sie auf dem neuen Server:

Kopieren Sie das Skript einfach in Notepad und speichern sie es als "copy-casurls.ps1" auf einem System mit Exchange PowerShell ab. Beim Aufruf sollten Sie natürlich die Parameter für "sourceserver" und targetserver" mitgeben.

Achtung: Das Skript nimmt nur die URLs, Hostnamen und wenige sonstige erforderliche Einstellungen mit. Wenn Sie noch andere Einstellungen abweichend konfiguriert haben, müssen Sie noch nacharbeiten.

Param (
   [string]$sourceserver = 'ex2016',
   [string]$targetserver = 'exse'
)

Write-Host "Copy CAS-URLs from Server $($sourceserver) to $($targetserver)"

Write-Host "Set-ClientAccessService"
$scp = Get-ClientAccessService -Identity $sourceserver
Write-Host " SCP AutoDiscoverServiceInternalUri $($scp.AutoDiscoverServiceInternalUri)"
Get-ClientAccessService -Identity $targetserver `
| Set-ClientAccessService  `
    -AutoDiscoverServiceInternalUri $scp.AutoDiscoverServiceInternalUri

Write-Host "Set-EcpVirtualDirectory"
$ecp = Get-EcpVirtualDirectory -Server $sourceserver
Write-Host " ECP ExternalUrl $($ecp.externalurl)"
Write-Host " ECP InternalUrl $($ecp.internalurl)"
Get-EcpVirtualDirectory -Server $targetserver `
| Set-EcpVirtualDirectory `
   -ExternalUrl $ecp.externalurl `
   -InternalUrl $ecp.internalurl

Write-Host "Set-WebServicesVirtualDirectory"
$ews = Get-WebServicesVirtualDirectory -Server $sourceserver
Write-Host " EWS ExternalUrl $($ews.externalurl)"
Write-Host " EWS InternalUrl $($ews.internalurl)" 
Write-Host " EWS MRSProxyEnabled $($ews.MRSProxyEnabled)"
Get-WebServicesVirtualDirectory -Server $targetserver `
| Set-WebServicesVirtualDirectory `
   -ExternalUrl $ews.externalurl `
   -InternalUrl $ews.internalurl `
   -MRSProxyEnabled $ews.MRSProxyEnabled

Write-Host "Set-MapiVirtualDirectory"
$mapi = Get-MapiVirtualDirectory -Server $sourceserver
Write-Host " MAPI ExternalUrl $($mapi.externalurl)"
Write-Host " MAPI InternalUrl $($mapi.internalurl)"
Get-MapiVirtualDirectory -Server $targetserver `
| Set-MapiVirtualDirectory `
   -ExternalUrl $mapi.externalurl `
   -InternalUrl $mapi.internalurl

Write-Host "Set-ActiveSyncVirtualDirectory"
$eas = Get-ActiveSyncVirtualDirectory -Server $sourceserver
Write-Host " EAS ExternalUrl $($eas.externalurl)"
Write-Host " EAS InternalUrl $($eas.internalurl)"
Get-ActiveSyncVirtualDirectory -Server $targetserver `
| Set-ActiveSyncVirtualDirectory `
   -ExternalUrl $eas.externalurl `
   -InternalUrl $eas.internalurl

Write-Host "Set-OabVirtualDirectory"
$oab = Get-OabVirtualDirectory -Server $sourceserver
Write-Host " OAB ExternalUrl $($oab.ExternalURL)"
Write-Host " OAB InternalUrl $($oab.InternalURL)"
Get-OabVirtualDirectory -Server $targetserver `
| Set-OabVirtualDirectory `
   -ExternalUrl $oab.ExternalURL `
   -InternalUrl $oab.InternalURL

Write-Host "Set-OwaVirtualDirectory"
$owa = Get-OwaVirtualDirectory -Server $sourceserver
Write-Host " OWA ExternalUrl $($owa.externalurl)"
Write-Host " OWA InternalUrl $($owa.internalurl)"
Get-OwaVirtualDirectory -Server $targetserver `
| Set-OwaVirtualDirectory `
   -ExternalUrl $owa.externalurl `
   -InternalUrl $owa.internalurl

#Write-Host "Set-PowerShellVirtualDirectory"
#$exps = Get-PowerShellVirtualDirectory -Server $sourceserver
#Write-Host " PS ExternalUrl $($exps.ExternalURL)"
#Write-Host " PS InternalUrl $($exps.InternalURL)"
#Get-PowerShellVirtualDirectory -Server $targetserver `
#| Set-PowerShellVirtualDirectory `
#   -ExternalUrl $exps.ExternalURL `
#   -InternalUrl $exps.InternalURL

Write-Host "Set-OutlookAnywhere"
$oa = Get-OutlookAnywhere -Server $sourceserver
Write-Host " OA ExternalHostname $($oa.ExternalHostName)"
Write-Host " OA InternalHostname $($oa.InternalHostName)"
Write-Host " OA ExternalClientsRequireSsl $($oa.ExternalClientsRequireSsl)"
Write-Host " OA InternalClientsRequireSsl $($oa.InternalClientsRequireSsl)"
Get-OutlookAnywhere -Server $targetserver `
| Set-OutlookAnywhere `
-ExternalHostname $oa.ExternalHostName `
-InternalHostname $oa.InternalHostName `
-ExternalClientsRequireSsl $oa.ExternalClientsRequireSsl `
-InternalClientsRequireSsl $oa.InternalClientsRequireSsl `
-ExternalClientAuthenticationMethod $oa.ExternalClientAuthenticationMethod `
-InternalClientAuthenticationMethod $oa.InternalClientAuthenticationMethod

Write-Host "Done"

Diese Skript überträgt nur die URLs aber keine anderen Einstellungen der virtuellen Webseiten. Wenn Sie die Exchange Standardwerte angepasst haben, z.B. die Authentication etc., dann müssen Sie die noch nachkonfigurieren.

Weitere Links