Exchange Environment Report v1.5.8 now available

The latest version of my Exchange Environment Report script is now available. In this version, updates are provided to better support Exchange 2013, along with a couple of additional new features:
  • Now correctly reports the Cumulative Update or Service Pack version for Exchange 2013.
  • Initial support for Hybrid Exchange Reporting of Office 365 and Exchange Online, with Remote Mailbox counts shown.
  • FQDNs used in Internal and External URLs, and AutoDiscover SCPs are collated and displayed on a per-site basis.
  • If defined, the CAS Array name is shown on a per-site basis.

Download the latest version of the Exchange Environment Report from the TechNet Scripting Gallery, and visit my EER page here.


129 thoughts on “Exchange Environment Report v1.5.8 now available

  1. Hi Steve,
    Very nice script.

    One line of code missing in # Rollup Level / Versions (Thanks to Bhargav Shukla section
    which causes the script to report an incorrect Update Rollup

    After iterating through registry, the variable store the previously found.
    Adding this line
    $RollupLevel=$tRU; $RollupVersion=$tRUV
    after closing brace of the iteration (line 374)
    will get the last found version

    • It would help if I actually included the error…..

      PS] C:\temp\Scripts>.\Get-ExchangeEnvironmentReport.ps1

      cmdlet Get-ExchangeEnvironmentReport.ps1 at command pipeline position 1
      Supply values for the following parameters:
      (Type !? for Help.)
      HTMLReport: 16FEB24ExchangeRpt
      Exception calling “Join” with “2” argument(s): “Value cannot be null.
      Parameter name: values”
      At C:\temp\Scripts\Get-ExchangeEnvironmentReport.ps1:567 char:42
      + $IntNames = [system.String]::Join <<<< (",",$IntNames)
      + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : DotNetMethodException

      Exception calling "Join" with "2" argument(s): "Value cannot be null.
      Parameter name: values"
      At C:\temp\Scripts\Get-ExchangeEnvironmentReport.ps1:568 char:42
      + $ExtNames = [system.String]::Join <<<< (",",$ExtNames)
      + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : DotNetMethodException

  2. Hi Steve, thanks for this! But it doesn’t generate the Mailbox Databases (Non-DAG) section for me. Running 2010 SP3 UR11.

  3. When mountpoin implement with a path, for example: m:\trlogs, the result of free space is the total value of the mountpoint storage.
    To fix I had to add a backslash:
    ” if ($Database.LogFolderPath.PathName + ‘\’ -like “$($Disk.Name)*”)”

    Sorry for mi ingles.

  4. Hi Steve,

    Finally!!! This is the report that I’m looking for. I have question though (I’m dumb in scripting), If i want the script to report particular servers only, i will modify this line?

    [parameter(Position=5,Mandatory=$false,ValueFromPipeline=$false,HelpMessage=’Server Name Filter (eg NL-*)’)][string]$ServerFilter=”*”

    E.G my server start with EXPRD2010

    So i can put this?

    [parameter(Position=5,Mandatory=$false,ValueFromPipeline=$false,HelpMessage=’Server Name Filter (eg NL-*)’)][string]$ServerFilter=”EXPRD2010*”

    I haven’t run the script yet.

  5. Steve,
    Thanks very much for your script and wonderful article up on regarding Migrating from 2007->2013. In working though this, I’m trying to run this script on one of my test machines (an Exchange 2010 SP3 UR8) on the console via RDP using the EMS as a user with Domain Admin privileges. I’m able to get the script to run after unblocking it and allowing unsigned scripts to run, however, the output is only showing server information (OS/Exchange), and none of the Database/Mailbox information that should be listed below. Any ideas on how I can get this information into the report?
    Thanks again,

    • Steve – while I’m eagerly awaiting your reply, I wanted to mention a couple of things that have changed on my end since my original post. The test server actually at the time of my original post was SP1 UR8.
      Since then, I created a user account that had Exchange Read-Only Admin permissions (much like a user that is required to run Exchange Profile Analyzer against a 2007 system) which would not be restricted like the typical Domain Admin users are within Exchange thinking the problem might be attributed to a permissions issue. I ran the script as that user but still no joy.
      I also went ahead and updated the server to SP3 UR10 and still am not able to get any info displayed under the Orange and Yellow headers. I only get Exchange Server info under the Blue headers and that’s all… Any ideas? I’d love to get this report from my test server…
      Thanks in advance.

  6. Hello Steve,

    the script is running at my site until line 568 then it stops with this error:
    In E:\scripts\Get-ExchangeEnvironmentReport.ps1:568 Zeichen:9
    + $ExtNames = [system.String]::Join(“,”,$ExtNames)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException
    It seems like it is not getting the 2nd Exchange 2013 Server?

    Any idea?

    Thanks jodew

  7. Hi Steve,

    This script is awesom, I am using latesh scrip update on 4th March 2015. When i run on entire forest it works well. When i try to do a Server Filter (NL-*) I am able to generate report with out any issue, But Mailbox count is not updateing. It remaing as 0. But this is not the case when i run in entire forest, it gives me total mailbox count with out any issue.

    My entier Exchange environmnet is only on Exchange 2010. You advice is most appreciated.

    – Kiran

  8. We have Exchange 2013 CU9 on a 2012 R2 server, the report is showing the server and the Exchange roles installed, but not showing the Exchange version, or any mailboxes.

  9. Steve, Thank you for the script!! I just wanted to make sure that you knew that when I download it I receive a message that the publisher cannot be verified. Thanks!

  10. Hi Steve,

    We recently upgraded from CU6 to CU10. The report would show UR6 afterwards.

    I dove in to figure out why and added two lines after line 355; Line 355 is shown here:

    if ($tRU -like “*-*”) { $tRUV=$tRU.Split(“-“)[1]; $tRU=$tRU.Split(“-“)[0] } else { $tRUV=”” }

    It turns out in line 356 that you are comparing strings. The string “6” is greater than the string “10”
    if ($tRU -ge $RollupLevel) { $RollupLevel=$tRU; $RollupVersion=$tRUV }

    These may not be the most elegant lines, but here is what I added between the two lines above:

    $tRU = $tRU -as [int]
    $RollupLevel = $RollupLevel -as [int]

    And it worked for me. One server was not yet upgraded and it, of course, still reported as UR6

    Exchange 2010 SP3 UR10
    Exchange 2010 SP3 UR6
    Exchange 2010 SP3 UR10

    Hopefully this will help others until your next release.


  11. Hi Steve,
    This is the best script ever!! I am running the latest version 1.5.8 however it is not reporting the Exchange 2013 Versions on the report.

    • Thanks Daren – I will be updating it, but if you search the script for CU4 or similar you will find the lookup table – apologies I’m on hols in Mallorca so not near a PC to update

Comments are closed.