
- 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,
Found a bug in v1.5.8 where RollupLevels are compared for Exchange 2010(v14).
String compare thinks 8 > 10 π
Solved it by converting the strings to integers:
if ([int]$tRU -ge [int]$RollupLevel) { $RollupLevel=$tRU; $RollupVersion=$tRUV }
Gr,
Remko
Steve,
I am trying to run this script from a remote server. I am invoking a PSSession during the ‘# 1. Initial Startup’ section. This helps me avoid the error about not loading the Exchange Shell and the report is created but most of the report sections are empty. I end up with the Total server count, the #mailboxes in the Org, the server names, and the DAG name but nothing else. How can I modify your script to run from a remote server using an account with full permissions to AD and Exchange?
Hi Heather, are you creating a remote Exchange Ps session as below first?
https://technet.microsoft.com/en-GB/library/dd297932(v=exchg.141).aspx
Yes. “I am invoking a PSSession during the β# 1. Initial Startupβ section.”
Not giving Exchange Version Information for Exchange 2013 when running in Exchange 2010 SP3 RU2 and Exchange 2013 CU8 Coexisting environment. Need to fix it.
You are right, I’ll be creating an update and releasing
Hi Steve,
Great script.
Is there any easy way to add which edition of Exchange is running ie. standard/enterprise for 2003/2007/2010/2013?
I know you can get this via PS with the get-exchangeServer command
Regards
Jason
Getting errors after running script on Exchange 2007 server 2008 Standard, SP2:
Exception calling “Join” with “2” argument(s): “value cannot be null.
Parameter name: value”
At C:\admin\Get-ExchangeEnvironmentReport.ps1:567 char:42
DotNetMethodException
Any help would be greatly appreciated. Appears to be a great script, though.
Norm
Same error – something is returning null value!
$ExtNames = [system.String]::Join(“,”,$ExtNames)
Hi Steve,
I’m running a Exchange 2013 CU7 DAG using mount points. The report is not reporting the correct free space for the mount points. Also the summaries at the top are not showing E2013 just the total number of servers and mailboxes.
thanks
Hi DavidS.
A client of mine had this exact same problem, which I was able to resolve by updating some of the code.
I have emailed Steve with the details, so hopefully, he will publish an update shortly.
Regards,
Simon.
This still does not show Exchange 2013 version/CU version.
Indeed it does not show Exchange 2013 CU version. Also I had to manually change row 800+802 in order to connect to our 2013 server (V14 > V15)
Awesome report, is there a simple way to exclude a specific server or servers? We have a few that are used for testing purposes and it would be awesome to suppress them from the report so I can make my boss happier. Thanks!!!!!
Pingback: Netrix LLC – Exchange 2013 PowerShell Scripts – A Practical Guide – Part 2
HI all,
Does anyone of you have any idea why the script is not counting my mailboxes? My environment is EX 2013 CU7 and Windows Server 2012 R2. I have 4 DB Servers and 4 CAS servers.
All other information script shows me π
Hi,
Script looks great
can you please include incremental backup as column in your script.
Thanks
Nagarjun V
The script needs to have CU6 and CU7 added to $ExSPLevelStrings (Exchange Service Pack String Mapping”, line 863. Without it it misreports Exch2013CU6 as blank.
Thank you for pointing to it ! THx !
Hi Stev,
Nice script. I need your help, how to set your script with schedule? Example runing schedule script every 1 week. Thanks lot.
Steve, I need your help and for the life of me I don’t know why this won’t work. I get all kinds of errors and don’t know what is wrong. I have copied everything exactly as you indicate and nothing. Please help and I would pay you to get this to work for me, I need it really bad.
What is the error you are getting? Tell us more about the issue and environment in which you are running this script.
Hi Gulab,
I copied and pasted the script exactly and I put the file output location i.e. c:\report.html but the reports runs so fast I’m not able to capture all the messages. During the task there are a lot of red letters and I can’t read what they say.
This is on a 2008 R2 server with Exchange 2007.
Is there a way to capture all the task so I can send you the errors?
DM
Hi
Run on Win2012 Exchange Management Shell output error
A parameter cannot be found that matches parameter name ‘IncludePreExchange2010’.
+ CategoryInfo : InvalidArgument: (:) [Get-MailboxDatabase], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Get-MailboxDatabase
+ PSComputerName : MailboxServer
PL
Pingback: Netrix LLC – Exchange 2013 PowerShell Scripts β A Practical Guide β Part 2
Pingback: Exchange 2013 PowerShell Scripts – A Practical Guide – Part 2 | Just A UC Guy
Pingback: Exchange 2013 PowerShell Scripts – A Practical Guide | Just A UC Guy
Boa Noite Steve,
Eu tenho um servidor Exchange Server 2010 SP3 e ja esta com o Rollup 6 instalado.
O Script esta no caminho correto [ C:\Program Files\Microsoft\Exchange Server\V14\Scripts ] e o arquivo HTML Γ© gerado com sucesso.
Ao abrir o arquivo HTML as informaΓ§Γ΅es dos campos [ Server, Database Name, Mailboxes, Av. Mailbox Size, DB Size e DB Whitespace ] nΓ£o aparecem nada, mas as demais informaΓ§Γ΅es, tipo, Exchange Version, Roles Installed, etc, todas aparecem.
Eu estou utilizando a versΓ£o V1.5.8, mas ja testei com todas versΓ΅es disponiveis no site, e todas estao com o mesmo sintoma.
Voce tem ideia do que poderia ser ?
Obrigado.
Machado
Exchange Environment Report v1.5.8 now available http://t.co/CiSnuKEjZQ
I see that having drive letters as well as mount points hasn’t been fixed in regards to free drive space – bummer…I really love this report. Is this any part of a bug list you are working on….or, is there a way I can manually fix your script to show correct numbers?
I fixed it by editing line 148 into
if ($($Database.LogFolderPath.PathName +”\”) -eq $($Disk.Name))
I have my Database pathname as H:\LOG1 and my disk name being reported as H:\ , H:\LOG1\ , H:\LOG2\ , etc
This caused the script (when looking at the LogFolderPath H:\LOG1) to incorrectly target the H:\ drive which was first in the list, instead of continuing on to the H:\LOG1\ drive.
This is a great script but for us, the one thing missing is an SCR status check to see if our Ex 2007 SCR copies are up to date. Would be great to see if you could add that as an option to the reports.
I have tried this on several of our Exchange servers and keep receiving the same error below:
You cannot call a method on a null-valued expression.
At C:\scripts\Get-ExchangeEnvironmentReport.ps1:188 char:47
+ [long]$Size = $Database.DatabaseSize.ToBytes <<<< ()
+ CategoryInfo : InvalidOperation: (ToBytes:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At C:\scripts\Get-ExchangeEnvironmentReport.ps1:189 char:65
+ [long]$Whitespace = $Database.AvailableNewMailboxSpace.ToBytes <<<< ()
+ CategoryInfo : InvalidOperation: (ToBytes:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
I hope you haven’t made any changes to the script after downloading it. Download the fresh copy and run it again.
No I have not made any changes to the script. I have also downloaded the script again from TechNet with the same errors.
What kind of changes would need to be made to the script to export to excel and append with each change to chart growth?
Steve u r the best. Thanks man for such wonderful work
How would one add the current mount status of each DB?
Thanks and awesome script!
GD
Steve, I’m getting an error on my Windows 2008 SP2 (not R2) / Exchange 2007 SP3 server. It seems to create a (partial?) report.html. When I use the email command line, the email never gets sent out. Maybe 1.5.6 would work better – is it still posted somewhere? Thoughts? Thanks π
PS C:\temp> .\Get-ExchangeEnvironmentReport -HTMLReport c:\report.html
Exception calling “Join” with “2” argument(s): “Value cannot be null.
Parameter name: value”
At C:\temp\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: value"
At C:\temp\Get-ExchangeEnvironmentReport.ps1:568 char:42
+ $ExtNames = [system.String]::Join <<<< (",",$ExtNames)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
I am getting the same errors. Did you ever figure this out?
Same Exception calling “join” with “2” argument(s) error here. Exchange 2013 SP1 on 2008 R2. Would really like to get this ironed out if anyone can help…
I’m having the same issue as well.
UnfortunatelyI am having the same issue. Exchange 2013CU6
Did anyone ever figure out an answer to this error? I’m seeing it in my environment. I’m using the latest version of the script.
I’ve not been able to reproduce this, so feel free to send me the partial report and rough description of what the report should include.
Email – steve@goodman.net
I just found a different thread with the cause and the solution for this problem. Ken describes it here:
http://www.stevieg.org/2011/06/exchange-environment-report/comment-page-7/#comment-9166
Does this script works for Exchange Server 2007 with CCR configuration ?
Yes
Just wondering if this can be run as an Exchange view only admin?
Does it make any changes or does it only use “get” cmdlets?
I’m a paranoid contract worker, thanks!
Good question, you should be able to run with Exchange View Only Admin.
Hasn’t tested it, but it should work.
It does not make any changes. It is not designed for a particular role e.g. View Only admin and uses WMI for some functions.
For the OCD amongst us I made a couple of modifications to sort Servers, DAGs, and DBs to make reading the report a bit easier.
– Line 899: Added ” | Sort Site,AdminDisplayVersion,Identity”
– Lines 917, 921, 923, 929: Added ” | Sort Identity”
Note: I chose Identity over Name so that 2007 and earlier DBs sort correctly since the StorageGroup parameter/property isn’t available from Get-MailboxDatabase in the 2013 shell.
It would be helpful to know which version of the code you modified.
Hi Steve,
1.5.8 was reporting the wrong rollup versions for a couple of our 2007 servers, so I went back to 1.5.6 and it reported the correct versions. When I compared the code, I found just one difference, (line 356):
1.5.8 line 356: if ($tRU -ge $RollupLevel) { $RollupLevel=$tRU; $RollupVersion=$tRUV }
1.5.6 line 330: if ([int]$tRU -ge $RollupLevel) { $RollupLevel=$tRU; $RollupVersion=$tRUV }
I added the “[int]” back to 1.5.8, and now the reported rollup versions are correct for all servers, 2007 and 2010.
Mike
Thanks, will update (doh!)
Awesome script. I know you’re very busy, but this is just a reminder to make the changes that Mike Koch pointed out regarding 2007 rollup versions.
Great script Steve, thanks! We’ve got it running as a daily task here π
Feedback on v 1.5.8:
– Thanks for fixing the CU issue for 2013 servers
– Line 313: Spelling error ‘consitent’
– Lines 567-8: Added a space to allow text to wrap correctly in table ::Join(“, “,$IntNames)
– Line 572: Cosmetic only ”
Thanks!
Pingback: Exchange Environment Report | Ivan Zini
Great report Steve, thank you! Is it possible to have the report send to two addresses? I’d prefer not to create a separate DL for desired recipients.
Use this paramenter:
-SendMail @(‘firstemail@company.com’,’secondemail@company.com’)
π
Sorry, I meant MailTo:
-MailTo @(βfirstemail@company.comβ,’secondemail@company.comβ)
Pingback: NeWay Technologies – Weekly Newsletter #81 – February 7, 2014 | NeWay
Pingback: NeWay Technologies – Weekly Newsletter #81 – February 6, 2014 | NeWay
one thing:
in an environment with one single EX2007, the script only works, if there is more than one Database in the first storage group, if there i no one, the output of the html is only filled up to Mailboxes and EX-Versions.
Is it possible to send the screenshots?
regards
Sure feel free. My email is steve@goodman.net
Hi Steve,
great job!! Would it be possible to do a joint venture between you and Maeffy ??
Both scripts in one would be great
http://peerfect.blogspot.de/2012/10/exchange-2007-exchange-2010-daily-or.html
Hello,
in my E2010 Enviroment (2k8R2/PS2.0) i had to change the “Getting Database Info” Block a little bit:
for ($i=0; $i -lt @($Databases).Count; $i++)
{
$Database = _GetDB -Database @($Databases)[$i] -ExchangeEnvironment $ExchangeEnvironment -Mailboxes $Mailboxes -ArchiveMailboxes $ArchiveMailboxes -E2010 $E2010
$DAGDB = $false
for ($j=0; $j -lt $ExchangeEnvironment.DAGs.Count; $j++)
{
if ($ExchangeEnvironment.DAGs[$j].Members -contains $Database.ActiveOwner)
{
$DAGDB=$true
$ExchangeEnvironment.DAGs[$j].Databases += $Database
}
}
if (!$DAGDB)
{
$ExchangeEnvironment.NonDAGDatabases += $Database
}
Hiya,
Can you tell me what issue you had?
Steve
Hi,
without the explicit array definition $Database.count was always zero, so the whole block skipt and there was no Database info in the output.
Without the second one, the script ran into an error:
Object from type “Microsoft.Exchange.Data.Directory.SystemConfiguration.MailboxDatabase” can not be indexed.
Again, $Databases was not treated as an array. With the definition @() all is well.
gunnar
I had the exact same problem and your script block fixed it as expected, thanks!
Setup:
2x 2008R2 servers Datacenter SP1
Exchange 2010 SP3 UR4 (had this problem for a while though)
Running in a CAS array and DAG
Hello, I’m afraid I’m not great with VB. I’ve fixed one of the errors I got from the script, but I don’t understand what I am supposed to do to fix this one.
Nevermind, After reading it again it clicked and I fixed it. Thanks!
Thanks, good to hear!
Thanks for maintaining this script. We use it every single day to help manage our environment. Great stuff.
It’s a pleasure, thanks.
Steve,
Would you be able to add the following features in a future release?
1. View DB and Log drive letters.
2. List which databases are currently enabled for provisioning.
Thanks!
Hi Left, great suggestions. Will keep them in mind.
“Exchange Environment Report v1.5.8 now available” http://t.co/tRKbSwFQep
Pingback: NeWay Technologies – Weekly Newsletter #80 – January 31, 2014 | NeWay
Pingback: NeWay Technologies – Weekly Newsletter #80 – January 30, 2014 | NeWay
Cool script from -> RT @stevegoodman: Exchange Environment Report v1.5.8 now available http://t.co/SCGs0un9Ir #iammec #msexchange
Hi Steve
I have tried running this from Powershell and the Exchange Management Shell and it gives me an error stating it cannot load the Exchange Management Shell?
I am running this as a full admin.
cheers
Ed
From which server you are running the script? Mailbox, CAS or HT? Try it from different exchange server and check, it should be fine.
Hi
I am running this from an exchange 2013 server with all roles installed. i have 4 servers and all 4 give the same error.
Can you post the sequence how you are running the script?
Agreed with Gulab, this should not happen. Do you have a screenshot you can mail me showing me the Exchange Management Shell open and the script being executed? My email is steve@goodman.net
Steve
I have had to edit the path information on or around line 805 to get the script to load the exchange shell module. It looks like the script is looking in the default folders for the binaries.
Hi Peter. My recommendation is to load the Exchange Management Shell first – the script does this as early on I had people struggle to schedule as a script
“Exchange Environment Report v1.5.8 now available” http://t.co/BdogtijtHv
#Exchange Environment Report v1.5.8 now available – http://t.co/330PBOakPm
#powershell
Good Steve,
Previous version was having issue as soon as I had run on ems and the same was informed you too some time back.
I just ran and it works as expected & Thanks
Found out of 9, 1 mailbox servers it should the roll up is missing and not equal with other 8 servers, the team will get back to work – this is awesome π
May be i will put at customers environment as scheduled task sending alert for exchange admins for a quick glance how exchange is doing in the environment π
Thanks glad it works better!
Pingback: Generate Exchange Environment Reports using Powershell | Steve Goodman's Exchange & Office 365 Blog