I’m pleased to announce the first beta release of Exchange Analyzer.

Exchange Analyzer is a PowerShell tool that scans an Exchange Server 2013/2016 organization and reports on compliance with best practices.

Exchange Analyzer Sample Report
Exchange Analyzer Sample Report

Exchange Analyzer is an open-source community project started by a group of Microsoft MVPs, and is currently a beta release seeking feedback and results from real world environments. This beta release includes five tests:

  • Checks that at least one Exchange 2013 or 2016 server exists (Exchange Analyzer will not check Exchange 2010 or earlier servers)
  • Checks that the Exchange 2013/2016 servers are running the latest build
  • Checks whether multiple namespaces exist for a Client Access protocol within an Active Directory site
  • Checks whether namespaces contain server FQDNs
  • Checks whether a database backup has occurred within the last 24 hours

The first of those tests is for Exchange Analyzer compatibility. The other tests were chosen for this beta release because they are the most common issues I encounter in customer environments. You can see a list of proposed tests in the Exchange Analyzer wiki.

For more information see the Exchange Analyzer page.

To get started:

  1. Download the latest Zip file
  2. Extract or copy the Zip file contents to a computer running PowerShell 4.0 (Windows Server 2012 R2 or Windows 10). An easy option is to run the script directly on an Exchange server, or a workstation or server that has the Exchange management tools installed.
  3. Copy the folders in the Modules folder to C:WindowsSystem32WindowsPowerShellV1.0Modules
  4. Open a new Exchange Management Shell or PS Remoting session to Exchange, and run the script.

Comments and feedback are welcome below. If you have a question please check the Exchange Analyzer FAQ first.

To receive news and updates about Exchange Analyzer by email subscribe to the Exchange Analyzer mailing list.

About the Author

Paul Cunningham

Paul is a former Microsoft MVP for Office Apps and Services. He works as a consultant, writer, and trainer specializing in Office 365 and Exchange Server. Paul no longer writes for Practical365.com.


  1. Anonymous

    [url=http://www.bestevance.com/cartier/tank/]Gaga Milanoスーパーコピー時計販売、 はガガミラノスーパーコピー通販専門店です . 0.267826628 レプリカGaga Milanoのクラスプ: 展開 . 製品はされています高品質ガガミラノと低価格で提供,、コピーぜひ一度当店の商品をお試しください。宜しくお願いします(^_^)。 . スーパーコピーガガミラノ時計Blog:[/url]

  2. eddie

    We have exchange 2010 and exchange 2013 servers running.
    I get an error running the script from a management server and from an exchange 2013 server as well:
    WARNING: An error has occurred during basic data collection.
    WARNING: Could not load file or assembly ‘Microsoft.Exchange.Data, Version=, Culture=neutral,
    PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

    1. Avatar photo
      Paul Cunningham

      We’ve got a fix for that coming in the next release. If you want to fix it for your current version take out the -Status switch from the Get-DatabaseAvailabilityGroup command.

  3. Derek Gagnon

    The EXSRV002 Build Numbers test fails with “Unable to connect to remote server”.
    -Verbose shows “scraping TechNet page”.

    Our Exchange environment has no direct access to the Internet. Is that the problem?

    1. Avatar photo
      Paul Cunningham

      Correct. I’m considering ways to work around that. One way would be to have a local copy of the build numbers for the script to compare against, but that adds the risk of it becoming out of date. So we may just use a link to an article explaining that you should manually verify your servers are at the latest build.

      1. Joe C

        Maybe it’s crazy but perhaps consider doing the build check via DNS. I would assume more servers can resolve external DNS hostnames than access external HTTP/HTTPS sites. Yeah, someone would have to maintain a TXT record out there with the latest build but..Probably easier than scraping the page and A) hoping it never changes B) hoping every internal exchange server has direct HTTP/HTTPS access.

        1. Avatar photo
          Paul Cunningham

          As it stands right now only the machine running the script needs external HTTP access, not every Exchange server.

          There’s other ways to host the data online, sure. I could manually maintain it in an XML file in Github. Or include it as one of the script files, which adds the risk of it being out of date when someone runs the script.

          What I’m leaning towards right now is just leaving it as is, and if internet access is not available the test throws a failed/warning and directs the user to manually check their builds against the TechNet information.

  4. Bill

    No Exchange 2010. That is too bad.

Leave a Reply