Powershell: Konfigurieren der internen und externen URLs von Exchange Server 2013, 2016
Für all diejenigen unter euch, die sich nicht durch alle Einstellungen für die internen und externen URLs im ECP wühlen möchten und da dort nicht alle nötigen URLs gesetzt werden können, habe ich ein Skript geschrieben, welches die internen und externen URLs für alle benötigten Dienste des Exchange Server 2013 / 2016 auf einen Schlag konfiguriert.
(EWS, OWA, ECP, OAB, Autodiscover, OutlookAnywhere, Mapi over HTTP)<#
.SYNOPSIS
Setzt die internen und externen URLs für die Dienste von Exchange Server 2013/2016
.DESCRIPTION
Das Script konfiguriert die internen und externen URLs von Exchange Server 2013/2016 für folgende Dienste:
- WebServicesVirtualDirectory
- OutlookWebAccessDirectory
- ECPVirtualDirectory
- ActiveSyncVirtualDirectory
- OABVirtualDirectory
- AutoDiscover URL
- Outlook Anywhere
- MAPI over HTTP (EX 2016)
.EXAMPLE
& 'C:\path\set-exchange-urls.ps1' -ExchangeServer EXSRV2013.domain.local -InternalFQDN "mail.contoso.com" -ExternalFQDN "owa.contoso.com"
.PARAMETER ExchangeServer
Der Name oder FQDN des Exchange-Servers auf dem die URLs geändert werden sollen (z.B. EXSRV2013 oder EXSRV2013.contoso.com)
.PARAMETER InternalFQDN
Der interne FQDN für den Zugriff innerhalb des Netzwerks (z.B. mail.contoso.com)
.PARAMETER ExternalFQDN
Der externe FQDN unter dem der Exchange von außen ereichbar sein soll (z.B. owa.contoso.com)
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$ExchangeServer,
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$InternalFQDN,
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$ExternalFQDN
)
begin{
cls
write-host "Stelle Verbindung zum Exchange-Server her ..." -F Green
$session = $null
try{
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://$exchangeserver/powershell" -Authentication Kerberos -Credential (get-credential)
Import-PSSession $session -DisableNameChecking -AllowClobber | out-null
}catch{
write-host $_.Exception.Message -F Red
return
}
$isExchange2016 = (Get-ExchangeServer $ExchangeServer).AdminDisplayVersion -match '^Version 15\.1'
Write-Host "Konfiguriere die URLs auf '$ExchangeServer' ..." -Foregroundcolor Green
}
process{
Write-Host "Setze EWS-URL ..." -F Green
Get-WebservicesVirtualDirectory -Server $ExchangeServer | Set-WebservicesVirtualDirectory -InternalURL https://$InternalFQDN/EWS/Exchange.asmx -ExternalURL https://$ExternalFQDN/EWS/Exchange.asmx
Write-Host "Setze OWA-URL ..." -F Green
Get-OwaVirtualDirectory -Server $ExchangeServer | Set-OwaVirtualDirectory -InternalURL https://$InternalFQDN/owa -ExternalURL https://$ExternalFQDN/owa
Write-Host "Setze ECP-URL ..." -F Green
Get-EcpVirtualDirectory -Server $ExchangeServer | Set-EcpVirtualDirectory -InternalURL https://$InternalFQDN/ecp -ExternalURL https://$ExternalFQDN/ecp
Write-Host "Setze ActiveSync-URL ..." -F Green
Get-ActiveSyncVirtualDirectory -Server $ExchangeServer | Set-ActiveSyncVirtualDirectory -InternalURL https://$InternalFQDN/Microsoft-Server-ActiveSync -ExternalURL https://$ExternalFQDN/Microsoft-Server-ActiveSync
Write-Host "Setze OAB-URL ..." -F Green
Get-OABVirtualDirectory -Server $ExchangeServer | Set-OABVirtualDirectory -InternalUrl https://$InternalFQDN/OAB -ExternalURL https://$ExternalFQDN/OAB
Write-Host "Setze AutoDiscover-URL ..." -F Green
if ($isExchange2016){
Set-ClientAccessService $ExchangeServer -AutodiscoverServiceInternalUri https://$InternalFQDN/Autodiscover/Autodiscover.xml
}else{
Set-ClientAccessServer $ExchangeServer -AutodiscoverServiceInternalUri https://$InternalFQDN/Autodiscover/Autodiscover.xml
}
Write-Host "Setze Outlook-Anywhere-Einstellungen ..." -F Green
Set-OutlookAnywhere -Identity "$ExchangeServer\Rpc (Default Web Site)" -InternalHostname $InternalFQDN -ExternalHostName $ExternalFQDN -InternalClientAuthenticationMethod ntlm -InternalClientsRequireSsl:$True -ExternalClientAuthenticationMethod NTLM -ExternalClientsRequireSsl:$True
if ($isExchange2016){
Write-Host "Setze Mapi-over-HTTP-URL ..." -F Green
Get-MapiVirtualDirectory -Server $ExchangeServer | Set-MapiVirtualDirectory -InternalURL https://$InternalFQDN/mapi -ExternalURL https://$ExternalFQDN/mapi
}
}
end{
# Anzeigen der neu gesetzten URLs
Write-Host "`n$('='*70)`nDie neuen URLs auf '$ExchangeServer' lauten nun wie folgt:`n$('='*70)`n" -F Green
Write-Host "EWS" -F Green
Get-WebservicesVirtualDirectory -Server $ExchangeServer | fl internalURL,ExternalURL
Write-Host "OWA" -F Green
Get-OWAVirtualDirectory -Server $ExchangeServer | fl internalUrl,ExternalURL
Write-Host "ECP" -F Green
Get-ECPVirtualDirectory -Server $ExchangeServer | fl InternalURL,ExternalURL
Write-Host "ActiveSync" -F Green
Get-ActiveSyncVirtualDirectory -Server $ExchangeServer | fl InternalURL,ExternalURL
Write-Host "OAB" -F Green
Get-OABVirtualDirectory -Server $ExchangeServer | fl InternalURL,ExternalURL
Write-Host "Autodiscover URL" -F Green
if($isExchange2016){
Get-ClientAccessService $ExchangeServer | fl AutodiscoverServiceInternalUri
}else{
Get-ClientAccessServer $ExchangeServer | fl AutodiscoverServiceInternalUri
}
Write-Host "Outlook Anywhere Einstellungen" -F Green
Get-OutlookAnywhere -Identity "$ExchangeServer\rpc (Default Web Site)" |fl internalhostname,internalclientauthenticationmethod,internalclientsrequiressl,externalhostname,externalclientauthenticationmethod,externalclientsrequiressl
if($isExchange2016){
write-Host "MAPI over HTTP" -F Green
Get-MapiVirtualDirectory -Server $ExchangeServer | fl InternalURL,ExternalURL
}
Write-Host "`n$('='*70)`nAbschließende Aufräumarbeiten`n$('='*70)`n" -Foregroundcolor Green
Write-Host "Starte IIS-Dienste neu ..." -F Green
iisreset $ExchangeServer
write-host "Beende Exchange-Session" -F Green
Remove-PSSession $session
write-host "SKRIPT BEENDET" -F Green
write-host 'HINWEIS: Sollte eine der URL noch nicht greifen empfehle ich einen Neustart des Servers.' -F DarkYellow
}
&'C:\path\set-exchange-urls.ps1' -ExchangeServer EXSRV2013.domain.local -InternalFQDN "mail.contoso.com" -ExternalFQDN "owa.contoso.com"
NACHTRAG vom 01.01.2016: Das Skript wurde nun zur Interoperabilität mit Exchange Server 2013 und jetzt auch 2016 optimiert.
Für Exchange Server 2016 ist noch eine URL mit hinzugekommen und zwar für die Nutzung von MAPI over HTTP.Viel Spaß
Grüße @colinardo
Alle Angaben wie immer ohne Gewähr, und die Nutzung geschieht auf eigene Gefahr
Please also mark the comments that contributed to the solution of the article
Content-ID: 236083
Url: https://administrator.de/contentid/236083
Printed on: November 11, 2024 at 10:11 o'clock
22 Comments
Latest comment
Hi Colinardo,
d.h ich kopiere mir den Kompletten Script Zl.01 - Zl.101 in eine ps1 Datei und speichere diese dann z.B. unter C:\script.ps1 ab.
Dann starte ich das ganze in der Powershell mit:
'C:\script.ps1' -ExchangeServer EXSRV2013.meinedomain.local -InternalFQDN "mail.meinedomain.com" -ExternalFQDN "owa.meinedomain.com"
?
ich nutze keinen Split DNS, kann ich dann auch für Extern den gleichen FQDN wie für Intern nehmen?
Viele Grüße
Philipp
d.h ich kopiere mir den Kompletten Script Zl.01 - Zl.101 in eine ps1 Datei und speichere diese dann z.B. unter C:\script.ps1 ab.
Dann starte ich das ganze in der Powershell mit:
'C:\script.ps1' -ExchangeServer EXSRV2013.meinedomain.local -InternalFQDN "mail.meinedomain.com" -ExternalFQDN "owa.meinedomain.com"
?
ich nutze keinen Split DNS, kann ich dann auch für Extern den gleichen FQDN wie für Intern nehmen?
Viele Grüße
Philipp
Hallo Uwe,
ich habe mir jetzt den script unter C:\script.ps1 abgespeichert
und hab das ganze mit folgenden befehl im PS gestartet:
PS C:\Users\Administrator.MEINEDOMÄNE> cd c:\
PS C:\> 'script.ps1' -ExchangeServer srvex.meinedomäne.local -InternalFQDN "mail.meinedomäne.de" -ExternalFQDN "mail.meinedomäne.de
... darauf dieser Fehler
"
In Zeile:1 Zeichen:14
In Zeile:1 Zeichen:30
+ CategoryInfo : ParserError: ( , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
PS C:\>
Hast du mir eine Idee?
ich habe mir jetzt den script unter C:\script.ps1 abgespeichert
und hab das ganze mit folgenden befehl im PS gestartet:
PS C:\Users\Administrator.MEINEDOMÄNE> cd c:\
PS C:\> 'script.ps1' -ExchangeServer srvex.meinedomäne.local -InternalFQDN "mail.meinedomäne.de" -ExternalFQDN "mail.meinedomäne.de
... darauf dieser Fehler
"
In Zeile:1 Zeichen:14
'script.ps1' -ExchangeServer srvex.meinedomäne.local -InternalFQDN "mail.meinedomäne.de ...
~~~~~~~~~~~~~~~
Unerwartetes Token "-ExchangeServer" in Ausdruck oder Anweisung.In Zeile:1 Zeichen:30
'script.ps1' -ExchangeServer srvex.meinedomäne.local -InternalFQDN "mail.meinedomäne.de ...
~~~~~~~~~~~~~~~~~~~~
Unerwartetes Token "srv.meinedomäne.local" in Ausdruck oder Anweisung.+ CategoryInfo : ParserError: ( , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
PS C:\>
Hast du mir eine Idee?
Ich verstehe nicht was ich falschmache ....
ich habe deinen Script genommen und die Zl.1-Zl.101unter c:\script.ps1 gespeichert
nun öffne ich die Powershell und gebe den Befehl:
'C:\script.ps1' -ExchangeServer srvexch.meinedomäne.local -InternalFQDN "mail.meinedomäne.de" -ExternalFQDN "mail.meinedomäne.de"
Was mache ich falsch?
ich habe deinen Script genommen und die Zl.1-Zl.101unter c:\script.ps1 gespeichert
nun öffne ich die Powershell und gebe den Befehl:
'C:\script.ps1' -ExchangeServer srvexch.meinedomäne.local -InternalFQDN "mail.meinedomäne.de" -ExternalFQDN "mail.meinedomäne.de"
Was mache ich falsch?
soo wenn ich die ' ' bei C:\script.ps1 weglasse erscheint nun folgendender Fehler:
[PS] C:\>C:\script.ps1 -ExchangeServer srvex.domain.local -InternalFQDN "mail.domain.de" -ExternalFQDN "mail.domain.de"
In C:\script.ps1:97 Zeichen:4
In C:\script.ps1:99 Zeichen:57
In C:\script.ps1:111 Zeichen:1
In C:\script.ps1:91 Zeichen:1
+ CategoryInfo : ParserError: ( , ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression
[PS] C:\>
[PS] C:\>C:\script.ps1 -ExchangeServer srvex.domain.local -InternalFQDN "mail.domain.de" -ExternalFQDN "mail.domain.de"
In C:\script.ps1:97 Zeichen:4
25.
~
Schließende ")" fehlt in einem Ausdruck.In C:\script.ps1:99 Zeichen:57
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$ExchangeServe ...
~
Nach "(" wurde ein Ausdruck erwartet.In C:\script.ps1:111 Zeichen:1
)
~
Unerwartetes Token ")" in Ausdruck oder Anweisung.In C:\script.ps1:91 Zeichen:1
[CmdletBinding()]
~~~~~~~~~~~~~~~~~
Unerwartetes Attribut "CmdletBinding".+ CategoryInfo : ParserError: ( , ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression
[PS] C:\>