vCheck Exchange Updated

imagePhil has been doing some fantastic work with the Exchange 2010 version of vCheck, his latest version now even supports Exchange 2007 !

He has also updated most of the plugins with new and exciting data, if you have Exchange and you have not yet tried it make sure you give it a whirl, if you have already been using the previous version make sure you update to this great new version.


To download this version of vCheck you can download the following file which includes the base script and all exchange plugins:

For more information on the base vCheck script and its framework including a demo of how to use it visit this page.


All Exchange Plugins are accessible via the Exchange plugins page located here.

Example Page

An example of the Exchange 2010 report can be viewed by clicking here.

Update Log

New in Exchange Plugins v2.0:

Exchange 2007 support

Report on drives with <= x% free space

MAPI Latency report where latency is above user specified threshold

Active DB not mounted on preferred server report

Various bug fixes and code cleanups

All the plugins have been renumbered into a more logical order

Plus, a bonus plugin to select (via vCheck.ps1 -config) the report header image

Added plugin “20 Exchange 20xx Largest Mailboxes by Total Size”, like 18 and 19,
but sorted by the sum of mailbox and dumpster sizes


00 1st Plugin – Select Report Header Image
Sets report header image
For example, download the Exchange header from
and save as vCheck\Headers\Exchange.png, and this will work out of the box
Falls back to vCheck\Header.jpg if specified header can’t be found

10 Exchange 20xx Load Snapin.ps1
Loads Exchange 2007 / Exchange 2010 powershel snapin

11 Exchange 20xx Basic Server Information.ps1
Basic Exchange server info: OS & Service pack, Exchange version, hotfix rollups,
Exchange Edition and Roles

12 Exchange 20xx Drive Details.ps1
Drive details for each of the Exchange servers.  Can be configured to report only
on drives with less than a specified percentage free space

13 Exchange 2010 Database Availability Groups.ps1
Basic info about your DAG groups – Exchange 2010 only

14 Exchange 20xx DB Statistics.ps1
Database statistics – number of mailboxes, sizes, circular logging, and last
backup dates

15 Exchange 2010 DB Status.ps1
Database status info

16 16 Exchange 2010 Active DB not on Preferred Server .ps1
Reports on databases not mounted on their preferred servers

17 Exchange 20xx MAPI Connectivity.ps1
List MAPI connectivity latencies – can be configured to only report on latencies
above a specified level

18 Exchange 20xx PF Statistics.ps1
Public Folder stats

20 Exchange 20xx Largest Mailboxes.ps1
Report on largest mailboxes by Mailbox size

21 Exchange 20xx Largest Dumpster.ps1
Report on largest mailboxes by Dumpster (deleted items) size

22 Exchange 20xx Largest Total Size.ps1
Report on largest mailboxes by Total size (Mailbox + Dumpster)

For each of the above three reports, you can report on the top n mailboxes by size
either across organisation or per DB, and you can also specify a threshold size to
report on.  For obvious reasons, I wouldn’t advise reporting on all mailboxes without
a non-zero threshold

Plugins for Exchange not up to date or installed.ps1
Report on out of date / missing plugins

Report on Plugins.ps1
Report on which plugins were invoked in current run

33 thoughts on “vCheck Exchange Updated

  1. Pingback: 2014 18

  2. Ian

    Is there a way to specify the domain controllers for it to query? I would like to run this from a report server that is joined to a different domain than the Exchange servers.

  3. Ayanes

    The script runs great and provides a ton of useful information, but I am getting the following errors.
    An error occurred while enumerating through a collection: The handle is invalid.
    At E:\Scripts\Exchange\vCheck\Plugins\24 Exchange 20xx Event Logs.ps1:51 char:22
    + $warningEvents += <<<< ($eventLog.entries) |
    + CategoryInfo : InvalidOperation: (System.Diagnost…triesEnumerator:EntriesEnumerator) [], RuntimeExcep
    + FullyQualifiedErrorId : BadEnumeration

  4. gigadafud

    Would it be possible to color code fields that come back with Unhealthy? Basically looking to color code anything with warnings or errors?

  5. Avram Woroch

    Got the reports running and scheduled, so all is well. We do monitor with Nagios as well, I might have to see if I can find a way to combine the two, which would be handy.

  6. Phil

    Counting messages is best done within a monitoring framework like Cacti or Nagios/Icinga with pnp4nagios. That way you get nice realtime graphs.

  7. Avram Woroch

    Just wanted to say thanks, this is running great!

    Is there a plug-in to count messages at all somehow, or is that a perfmon type of thing? It might be interesting to see # of messages in/out per day to see if load is increasing or average size of mail messages as they go. Probably not the nature of this sort of report, but about the only thing I could think of that I’d want more!

  8. Phil

    Hi Roger,

    That suggests that the Exchange SnapIn isn’t loading correctly in

    10 Exchange 20xx Load Snapin.ps1

    The code in there is trivial enough to debug easily

  9. Roger

    The original report V6.15 runs great on my 2010 servers. This most recent version stops running without an error after the ‘List plugins’ I get a report with just the plugins listed as true and no other info is shown. The script completes in about 3-4 seconds.

    An ideas?

  10. Phil


    Colouring ‘critical’ drive free space issues in red will be in the next release

  11. bisha

    How can I mark one of the table rows as red ? for ex, if space < 10% mark that row.

  12. steve

    Getting this error

    Get-VCheckPlugin : System.Net.WebException: The proxy name could not be resolved: ‘’
    at System.Net.WebClient.OpenRead(Uri address)
    at OpenRead(Object , Object[] )
    at System.Management.Automation.DotNetAdapter.AuxiliaryMethodInvoke(Object target, Object[] arguments, MethodInforma
    tion methodInformation, Object[] originalArguments)
    At C:\Users\administrator.CONTOSO\Desktop\Plugins\Plugins for Exchange not up to date or installed.ps1:15 char:34
    + $NotInstalled = Get-vCheckPlugin <<<< -NotInstalled -Proxy $proxy | Where { $_.Category -eq "Exchange2010" } | S
    elect Name, version, Status, Description
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-VCheckPlugin

  13. Phil


    You might have something there. I never even thought of the possibility of administering Exchange from a 32-bit box. Our admin boxes are 64-bit.

  14. Mike Robinson


    I was trying to play with that today but people just kept pulling me into things!

    Is it possible that this doesn’t work if you’re running it on a 32-bit machine? In two environments I was running this and it wasn’t working, but I realized that in both I was using my 32-bit admin server. Ran it on the exchange CAS server and no problems!

  15. Phil


    That implies that the registry open isn’t working or that there’s a permissions issue on the registry keys. I tend to debug this sort of thing with a bit of copy and paste into an exchange command shell.

    In the meantime, here’s a beta of the next update:

    I’ve added a few more plugins – check the readme before running.

  16. Mike Robinson


    AdminDisplayVersion was there, but had no values for .major or .minor. At least that was the case on Friday. Now its working! I must have been mistyping something trying to get out the door on a weekend!!! My apologies.

    The error is still the same. I’ve attached it below. Working backwards, I thought on Friday it was because the admindisplayversion.major was missing that the rest of the script was failing, but obviously thats not the case!

    I’m poking around now to see what I missed!

    8:59:18 AM …Collating Server Details for EXCAS2-PHL
    You cannot call a method on a null-valued expression.
    At C:\vCheckExchange\Plugins\11 Exchange 20xx Basic Server Information.ps1:44 c
    + $installedRollUps = $registry.OpenSubKey($rollUpKey).GetSubKeyNames <<<
    < ()
    + CategoryInfo : InvalidOperation: (GetSubKeyNames:String) [], Ru
    + FullyQualifiedErrorId : InvokeMethodOnNull

    You cannot call a method on a null-valued expression.
    At C:\vCheckExchange\Plugins\11 Exchange 20xx Basic Server Information.ps1:49 c
    + $Rollups += ($thisRollUp | %{$registry.OpenSubKey($_).getvalue <<<< (
    'DisplayName')}) + ", "
    + CategoryInfo : InvalidOperation: (getvalue:String) [], RuntimeE
    + FullyQualifiedErrorId : InvokeMethodOnNull

  17. Phil


    That’s just strange. How can there not be a value there?


    Another strange one.

    I’m tempted to think that the Exchange Management Shell install is broken in some strange way. Fully service packed and hotfixed?

  18. Matteo Saitta


    My fix was the removal of the sorting routine and to call for a format-list, the plugin that were conflicting with was “12 Exchange 20xx Drive Details.ps1”

  19. Mike Robinson

    AdminDisplayVersion is there. But there is no output for .minor or .major, so the result set is null.

  20. Phil


    What was your fix for DAG info?

    And which plugin (exact name) then has a namespace clash?

    Any error messages would be helpful.

  21. Matteo Saitta

    @Phil it seems that if i fix dag info, the exchange storage plugin will have namespace clash with it so i have removed it. Is there any debug or dump mode i can help you with?

  22. Phil


    You’re going to have to test from your Exchange Command Shell

    Get-ExchangeServer | fl

    And see if AdminDisplayVersion is there or not in the output.

    Other possibility is to do an explicit select for all the attributes being used…

    On or about line 21:

    Sort Name | select Name, AdminDisplayVersion, Edition, ServerRole

  23. Mike Robinson

    Plugin 11 doesn’t work for me. AdminDisplayVersion.Major doesn’t exist. I tried a 2007 and 2010 environment. Since the output is null effectively nothing happens in that script.

  24. Phil


    It was tested against Exchange 2010 SP2 and works fine out of the box for me.

    If you can experiment at the command line to figure what’s happening in your environment and what the fix is, it would be appreciated.

    Do we need to put explicit “Select” pipelines in to collect the attributes we’re interested in?

    Have you modified your default commandlet views at all?

  25. Pingback: vCheck Exchange » Pascal Vis

  26. Matteo Saitta


    I’d like to report one of the plugins not working on exchange 2010 sp2. Plugin 13 won’t work due to the parameters not being shown if using the default get-databaseavailabilitygroup table view rather than list.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.