
- 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.
Hi Steve,
Very nice script.
One line of code missing in # Rollup Level / Versions (Thanks to Bhargav Shukla http://bit.ly/msxGIJ) 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
Thanks
I get the following error, with Exchange 2007 SP3/RU17 (yes it really is Exchange 2007) preparing for upgrade.
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
Hi Steve, thanks for this! But it doesn’t generate the Mailbox Databases (Non-DAG) section for me. Running 2010 SP3 UR11.
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.
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.
Great Script!! What parameter I need to amend and how so that I can get this report on a email.
Steve,
Thanks very much for your script and wonderful article up on MSExchange.org 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,
-F
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.
-F
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
What version of Exchange and roll up?
it is Exchange Server 2013 Service Pack 1 (SP1 aka CU4)
OK, I have seen a similar error in testing a new version. I’ll publish the new version tonight so please re-download and try tomorrow.
Hi Steve, it is running now. Thanks.
But i am having trouble with sending the report via email. Is it only just typing the email adresses and the servername after the variables in the param section?
Yes it uses the variables specified as parameters. You’ll see how it uses the exact parameters on the last couple of lines.
Steve,
Any chance the parameters can be stored in an INI file so that we don’t have to adjust the script each time there is a new version?
Ken
You shouldn’t need to change the script each time. Can you explain a little more about what you are having to do?
I guess I am just lazy, and don’t like using the command line parameters, so I hard code the mail info and report name into the script.
What you could do then is run the script from a BAT / CMD file. That’s what I’ve done if I run it as a scheduled task
Yeah, it is already running that way, but there are also some changes that I have made to the Title of the HTML page that I need to transfer over each time to. I like the text a little larger and I also added a line to get the server info and include what server the script was run on in the header of the page.
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
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.
Issue resolved, added the following to the $ExSPLevelStrings array.
“CU4” = “CU4”
“CU5” = “CU5”
“CU6” = “CU6”
“CU7” = “CU7”
“CU8” = “CU8”
“CU9” = “CU9”
Hiya, yes – that’s right you probably want to add a few more on top
I ended up fixing this by doing a for loop to add a large number of CUs. To be honest this isn’t strictly needed but the RU/CU/SP matching would need to be written.
Hiya, I’ll be updating the script asap to cover this
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!
Hiya, that is expected.
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.
Rich
Thanks – I’ve had to fix that on site when I’ve came across it however on those occasions I’ve neglected to take a copy!
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.
-Daren
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
Hi Steve, Great script. When will you be including Public folders?
Hi Dennis, what would you like to see?