Exchange 2013 Unattended Installation Script (Updated)

Ex2013 LogoI’m pleased to announce the availability of Install-Exchange2013.ps1, a PowerShell script to perform a fully unattended setup of Exchange Server 2013.

The script takes care of:

  • Installing required Windows Server 2008 R2 SP1 / 2012 / 2012 R2 features and optionally prepare Active Directory (phase 1);
  • Install Exchange Server 2013 prerequisites (phase 2);
  • Optionally install Exchange Server 2013 (phase 3)
  • Optionally – depending on phase 3 – perform post-configuration (phase 4, tailor to your own needs);
  • When done, the script will perform some cleaning up, like removing the state file and setting the startup of Transport Service back to Automatic (phase 5).

Usage
This script version requires a domain-joined Windows Server, an account to perform the installation (and optionally prepare Active Directory) and the location where the Exchange Server 2013 installation files are stored (e.g. an UNC path).

The syntax is as follows:

Install-Exchange2013.ps1 -[InstallCAS|InstallMailbox|InstallBoth] -SourcePath <string> [-Organization <string>] [-MDBName <string>] [-MDBDBPath <string>] [-MDBLogPath <string>] [-InstallPath <string>] [-TargetPath <string>] [-AutoPilot] [-Credentials <pscredential>] [-NoSetup] [<CommonParameters>]

A short description of the parameters:

  • Organization (optional): Specifies name of the Exchange organization to create. When omitted, the step to prepare Active Directory (PrepareAD) will be skipped.
  • InstallMailbox: Specifies you want to install the Mailbox server role.
  • InstallCAS: Specifies you want to install the CAS role.
  • InstallMultiRole:Specifies you want to install both Mailbox server and CAS roles.
  • MDBName (optional): Specifies name of the initially created database.
  • MDBDBPath (optional): Specifies database path of the initially created database (requires MDBName).
  • MDBLogPath (optional): Specifies log path of the initially created database (requires MDBName).
  • InstallPath (optional): Specifies (temporary) location of where to store prerequisites, transcript and state file. Default location is C:\Install.
  • NoSetup (optional): Specifies you don’t want to perform Exchange setup.
  • SourcePath: Specifies location of the Exchange 2013 installation files (setup.exe).
  • TargetPath: Specifies the location where to install the Exchange 2013.
  • AutoPilot (switch): Specifies you want to automatically restart, logon using credentials specified and continue the installation. When not specified, you will need to restart, logon and start the script manually each time (without parameters).
  • Credentials (optional): Specifies credentials to use for automatic logon. Use DOMAIN\User or user@domain. When not specified, you will be prompted to enter credentials.
  • IncludeFixes (optional).  Depending on operating system and detected Exchange version to install, will download and install recommended hotfixes (e.g. KB2938053) and tune .NET for store (DisableRetStructPinning).
  • InstallFilterPack (optional). Adds installing Office filters for OneNote & Publisher support.

Note that the script uses an XML file to store the (original) parameters used to start the script but also to keep track of the the process. Of course, if required, you can use predefined XML files to run the script without parameters.

Note that when not present, the script will try to download the prerequisites from the internet. When that isn’t possible or to save bandwidth, you can put them in the location defined by InstallPath and the script will detect and use them.

The post-configuration is currently adding IFilters for OneNote and Publisher (Mailbox) only. There are comments in the script where to add your own additional post-configuration steps.

For example, assume we want to start a fully unattended install of an Exchange Server 2013 Client Access server, using a network location for the Exchange Server 2013 source files. After setting the Execution Policy to Unrestricted and storing the script locally, we start the script using:

 .\Install-Exchange2013.ps1 –InstallCAS –SourcePath ‘\\server\share\isos\Microsoft\Exchange2013\mu_exchange_server_2013_x64_dvd_1112105’ –AutoPilot –Verbose

The script will perform some checks and since AutoPilot was specified without using the Credentials parameter, the script will ask for credentials.

Capture1

After entering the credentials, the required features will be installed. Since OrganizationName wasn’t specified, Active Directory preparation will be skipped.

Capture2

After rebooting, the system will automatically log on using the credentials specified earlier and start the script (RunOnce registry key is utilized for this purpose). It will read the last known state from the XML file and will continue with the next phase, which is downloading (when not present) and installing the Exchange prerequisites.

Capture3

Next, after rebooting and the automatic logon, Exchange will be installed from the source location.

Capture4

When done, the system will perform post configuration and finalization steps including reboots and logons. Note that it may seem like a lot of reboots, but rebooting after installing Windows features and Exchange prerequisites is required anyway so I put reboots after the other milestones as well.

Download
You can download Install-Exchange2013.ps1 here from the Technet Gallery. Please leave your feedback or bug reports in the comments.

Revision History
The revision history is maintained at the Technet Gallery page.

53 thoughts on “Exchange 2013 Unattended Installation Script (Updated)

  1. Pingback: Microsoft Exchange Server 2013 Unattended Installation Script - Mark Fugatt - Exchange and OCS Blog - Site Home - TechNet Blogs

  2. Pingback: NeWay Technologies – Weekly Newsletter #31 – February 21, 2013NeWay | NeWay

  3. Hi Michael
    filter office pack and sp1 aren’t required for 2013
    you can remove them from the script(its a TechNet error for basic office filtering not required)

  4. Pingback: The UC Architects » Episode 18: Get Us Drunk, and We’re Yours!

  5. Pingback: Spr33 » Microsoft Exchange Server 2013 Unattended Instal Script

  6. Pingback: Exchange 2013 Unattended Installation Script (Updated) | EighTwOne (821) | JC's Blog-O-Gibberish

  7. Hi.. Great Job and thank you for sharing this.
    I´m getting following error…
    C:\Install\Install-Exchange2013.ps1 : Unexpected OS Version (6.2)
    In Zeile:1 Zeichen:1
    + .\Install-Exchange2013 -Organization ‘EXLAB’ -InstallMailbox -MDBDBPath ‘D:\DB1′ …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-Exchange2013.ps1

  8. Pingback: Installing Exchange 2013 prerequisites | Andy Heywood Online

  9. I am having problems with the script when installing from a newly built 2012 server it fails to install the UCMA 4.0 runtime as the windows feature Server-Media-Foundation is not getting installed before UCMA 4.0 and it seems to be a prerequisite for this even though its not published. Have you seen this before?

  10. Thanks for the script! I ran into a couple snags. One being the UCMA issue that you appear to be aware of. The other was that the Exchange installation was failing due to the ‘ol DiscoverySearchMailbox problems. The problem is the script wasn’t providing any visibility into the fact that the installation wasn’t completing successfully. As far as it knew everything went through fine, but the ClientAccess role wasn’t being installed (and I think the mailbox role was only partially installed).

    I was able to launch setup through the GUI and it gave me the errors which I could then troubleshoot.

    On an unrelated note – would it be possible to provide an option to NOT uninstall RSAT-ADDS-Tools after completion? :)

  11. Pingback: Exchange 2013 Unattended Installation Script v1.1 | EighTwOne (821)

  12. Pingback: Exchange 2013 Unattended Installation Script v1.5 | EighTwOne (821)

  13. Greetings! I know this is somewhat off topic but I was wondering if
    you knew where I could get a captcha plugin for my comment form?
    I’m using the same blog platform as yours and I’m having problems finding one?

    Thanks a lot!

  14. Note: There looks to be a PowerShell v2 bug (as it works as expected in PSv3, ie WS2012). Cause is that on WS2008R2, you can’t either specify InstallCAS or InstallMailbox, only both. Apparantly, PSv2 can’t figure out what parameter set to use (should use “CM” variant) so it ends in AmbigiousParameterset. Note that when running help .\Install-Exchange2013.ps1 is shows that only specifying InstallMailbox or InstallCAS is a valid syntax. Standby while I look for a suited workaround.

  15. Hi
    To day I found this link and downloaded the script.
    Im testing the script with server2012 but get stuck with this error, how do I get around it
    Checking Forest Functional Level
    The following exception occurred while retrieving member “get”: “Unknown error (0×80005000)”
    At C:\install\Install-Exchange2013.ps1:411 char:15
    + return( ([ADSI]“LDAP://cn=partitions,cn=configuration,$RootDSE”).get(“ms …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException
    + FullyQualifiedErrorId : CatchFromBaseGetMember

    Check-Sanity : Forest is not Functional Level 2003 or later
    At C:\install\Install-Exchange2013.ps1:906 char:5
    + Check-Sanity
    + ~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Check-Sanity

  16. Regarding “KB2758857: Insecure library loading could allow remote code execution (supersedes KB2533623)” – it supersedes KB2533623 for W2008 only, not for W2008R2.
    And the Exchange prerequisites page still says KB2533623 is required.

  17. To check if this feature is installed, you should use
    If( ! (Get-WindowsFeature $Feat).Installed )
    instead of
    If( !( Get-WindowsFeature ($Feat)))

    Also, (at least for some features) reboot was required before they showed up as installed.

    Great script, thanks!

  18. Great script!

    I installed a Exchange 2013 server with this script today and after the install i wanted to apply CU2
    i got the following 3 errors

    RSAT-Clustering-CmdInterface
    FilterPack64bit
    filterpack2010sp1-kb2460041-x64-fullfile-en-us

    are not installed.

    Can you please fix this
    thnx

      • Michel,

        I installed RTM and then tried to upgrade to CU2 (yes i know next time install CU right away, but i forgot that CU2 was released) and de setup from CU2 gave me the error that i need to istall the 3 components above

        • If I recall correctly, the filter packs will only result in a warning. They aren’t required. That issue with RSAT-Clustering-CmdInterface is a bit of quirk (it’s not required with fresh CU2 installs, just confirmed as I’m reinstalling some of my lab servers atm)

          • Maybe it is just me but i wasn’t able to update to CU2
            if you have time install a RTM with the script and try to install CU2

  19. Pingback: Exchange Server 2013 CU2 Service Templates for Virtual Machine Manager - Building Clouds Blog - Site Home - TechNet Blogs

  20. This is a great script. As FYI, it fails if there are spaces in the arguments, such as in the MDB path or the Exchange setup path. Once I removed them, it worked fine.

  21. Pingback: Exchange 2013 Unattended Installation Script (Updated) | EighTwOne (821) | JC's Blog-O-Gibberish

  22. Great script Michel.

    Can you please check the spaces?

    TargetPath ‘D:\Program Files\Microsoft\Exchange Server\V15′
    but installed in: D:\Program,Files\Microsoft\Exchange,Server\V15

      • Hi Michel, see below log details. Please note the LogFolderPath is also incorrect: Command Line:./Install-Exchange2013.ps1 -InstallMultiRole -MDBName DAG01_DB01 -MDBDBPath D:\DAG_01\DB -MDBLogPath D:\DAG_01\Log -SourcePath D:\Install\E2K13CU3 -TargetPath ‘D:\Program Files\Microsoft\Exchange Server\V15′ -AutoPilot -Credentials $Cred -IncludeFixes -Verbose Transcript started, output file is C:\Install\Install-Exchange2013.ps1_20140215102622.logVERBOSE: Disabling File Security Warning dialogVERBOSE: Disabling Automatic LogonChecking for pending reboot ..VERBOSE: Current phase is 4 of 6Installing Exchange 2013Installing Microsoft Exchange Server 2013VERBOSE: Executing D:\Install\E2K13CU3\setup.exe /mode:install /roles:Mailbox,ClientAccess /IAcceptExchangeServerLicenseTerms /InstallWindowsComponents /MdbName:DAG01_DB01 /DBFilePath:”D:\DAG_01\DB\DAG01_DB01.edb” /LogFolderPath:”D:\DAG_01\Log\DAG01_DB01\Log” /TargetDir:D:\Program Files\Microsoft\Exchange Server\V15 /DoNotStartTransportInstall-Exchange2013_ : Problem installing At D:\Install\Install-Exchange2013.ps1:943 char:13+ Install-Exchange2013_+ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-Exchange2013_ **********************Windows PowerShell transcript endEnd time: 20140215103102********************** Regards,Franck Date: Sat, 15 Feb 2014 09:37:26 +0000To: franckwolf@hotmail.comFrom: comment-reply@wordpress.comSubject: [New comment] Exchange 2013 Unattended Installation Script (Updated)

        WordPress.com

        Michel de Rooij commented: “Thanks for the heads-up!”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s