Exchange v15 (2013/2016/2019) Unattended Installation Script

This script automates deployment of Exchange v15 (2013/2016/2019), i.e. installing Windows Server features, AD preparation, installing Exchange Server 2013/2016/2019 prerequisites and Exchange itself, and performing post-configuration.

4.7 Star
15,026 times
Add to favorites
E-mail Twitter Digg Facebook
  • Paramters for adding additional Exchange Server
    2 Posts | Last post December 13, 2019
    • What would the parameters be for installing an Exchange 2016 server in an environment that already has a single Exchange 2010 server (for example at the start of a migration)?
    • Not different from greenfield environments; In existing environments I would emphasize using the SCP parameter to quickly reconfigure the SCP record post configuration, unless you are using deployment AD site or other measures.
  • Static IP check
    3 Posts | Last post November 16, 2019
    • I think your script is GREAT!!!!  Love it. One suggestion is a switch to ignore static address checking. I am running a lab environment in Azure and I don't set the actual NIC with a static address. I have it set to static in Azure but not on the NIC.  Just a thought.  
      thank you again for the script.
    • And on the other side are people who want this to be a blocker :)
      I'll put it on the list, maybe turn it into a warning (matching Exchange Setup's behavior)  
    • Michel.  I have the same scenario. I work for a software company and we deploy TONS of test labs in azure.  One Idea I have that you could do is check for the presence of one of these 3 services and if present skip the static IP check.
      Windows Azure Guest Agent
      Windows Azure Network Agent
      Windows Azure Telemetry Service
  • small error
    2 Posts | Last post October 30, 2019
    • Hi Michel,
      Cam across this script today and have used it to successfully recover a "dead" Exchange 2016 installation.  It worked like a dream thank you.
      One small error with the script version 3.2.2 it generates an error, which doesn't prevent the script from running.
      "A null key is not allowed in a hash literal.
      At C:\batch\Install-Exchange15.ps1:700 char:9
      +              $EX2019SETUPEXE_CU3= 'Exchange Server 2019 CU3'  "
      This seems to relate to line 613 which contains the text $EX2019SETUPEXE_CU2 which seems to be a repeat of the previous line.  I replaced the entry with $EX2019SETUPEXE_CU3 and the script ran without error.
      Hope this is useful.
      Thanks for the script 
    • Thanks for catching that
  • A couple of things
    2 Posts | Last post April 25, 2019
    • Exchange 2013 CU22 has been released.
      While trying to add manually (it doesn't seem like much as changed other than this is as security update) - I noticed that the SetupVersionText was returning incorrect values -- I think you need to add in the | Sort-Object condition to get it to match.
       $Versions.GetEnumerator() | Sort-Object -Property {[System.Version]$_.Name} -Desc | ForEach {
                If( is-MinimalBuild $_.Name $FileVersion) {
                    $res= '{0} (build {1})' -f $_.Value, $FileVersion
      Additionally, for many of the hotfixes, the server doesn't seem to be responding and it seems that Microsoft switched hotfixes to Windows Update Catalog.  
    • Thanks for the feedback & headsup. I'll have a look
  • C++ Redist not installing - SOLUTION
    2 Posts | Last post March 01, 2019
    • After looking at the script some, found that the reason the C++ Redist is not installing when not present is because of a bug in the Package-Install function.
      Line 1319 should be $false instead of $true.
        Else {
                  # Just install, don't detect
                  Write-MyOutput "Processing $Package"
                  $PresenceKey= $false
    • Ugh. Thanks for catching that, Bren!
  • Add Visual C++ 2013 Redistributable Package?
    3 Posts | Last post January 27, 2019
    • Your script is great and I love it. Would it be possible to add this to the list of packages installed? When I ran it on Exchange 2019, I received this:
      Visual C++ 2013 Redistributable Package is a required component. Please install the required binaries and re-run the
      setup. Use URI to download the binaries.
      For more information, visit:
      The Exchange Server setup operation didn't complete. More details can be found in ExchangeSetup.log located in the
      <SystemDrive>:\ExchangeSetupLogs folder.
    • Same here. I located the binary and installed it manually, download link at row 2731 in the script and after that the script completes. I'm trying to see what's up in this awesome beast of a script but my skills might be lacking...
    • Noted to investigate, thanks for the feedback
  • .Net 4.72
    2 Posts | Last post December 14, 2018
    • Hi Michel.
      The line below has a typo.
      Package-Install "KB4054530" "Microsoft .NET Framework 4.7.2" "NDP472-KB4054530-x86-x64-AllOS-ENU" "" ("/q", "/norestart")
      You seem to have forgotten the .exe after "NDP472-KB4054530-x86-x64-AllOS-ENU" in this instance.
      I checked on GitHub as well and also seems to affect v3.00.01
    • Thanks for catching that - 3.00.2
  • v3.00.01 - Unavailable
    2 Posts | Last post December 14, 2018
    • Hi Michel,
      Still seems to be v3.00.00 that is downloading rather than v3.00.01
    • Cosmetic
  • Any update on remote install?
    1 Posts | Last post October 22, 2018
    • Hi Michel and thank you for this script and all of the contributions you give!!
      I have used this to install 2016 CU5 on 20 servers and would really like to be able to install it without having to touch each machine. I have not been able to get that to work and have noticed a few comments of others trying to get this to work without any success. Have you or anybody else been able to get remote install to work and if so would you share?
      Thanks again!!
  • Support for Exchange 2016 CU10
    1 Posts | Last post July 02, 2018
    • Hello do you know when you will release a version that supports Exchange 2016 CU10?
1 - 10 of 36 Items