I’ve recently been exploring the challenge of detecting back pressure on Hub Transport servers without the assistance of any monitoring system in an Exchange Server environment.

Because back pressure is reported by a Transport server in the Application event log it is possible to automate checking for the events using PowerShell.

The objective is to make it possible to check Hub Transport servers reasonably quickly for their current state to discover whether the back pressure events are occurring.

I’ve written a basic script to perform this check, which I’ll share here in its current form.

Download Test-TransportServerBackPressure.ps1 from Github.

Running the Script

This script has the following dependencies:

  • PowerShell 2.0 on the server running the script
  • Exchange 2010 (or later) Management Tools on the server running the script
  • PS Remoting enabled on the Hub Transport servers being checked (will error if not)
  • You may need to modify your PowerShell execution policy to run this script file

When running the script please also be aware that:

  • If your servers have no back pressure issues at all then the results won’t be very interesting 🙂
  • If your servers experienced a back pressure condition and you cycled the Transport service as part of your corrective action then the last event log entry may not reflect the true current state of the server

Checking a single Hub Transport server:

PS C:Scripts> .Test-TransportServerBackPressure.ps1 ho-ex2010-mb1

HO-EX2010-MB1 has no back pressure events found.

Checking all Hub Transport servers:

PS C:Scripts> .Test-TransportServerBackPressure.ps1

HO-EX2010-MB1 has no back pressure events found.
HO-EX2010-MB2 is Critical (Diskspace) as of 44 hours ago
BR-EX2010-MB has no back pressure events found.
HO-EX2007-MB1 is Critical (Diskspace) as of 44 hours ago

Download Test-TransportServerBackPressure.ps1 from Github.

If you are experiencing back pressure issues on your Hub Transport servers please read this guide to back pressure in Exchange Server.

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.

Comments

  1. Stuart Rowe

    Hi Paul, I just discovered your script after having a back pressure issue (first time so quite a new discovery for me). After I fixed the issue I went in search of a way to get proactive notifications and found your script. Many thanks!

  2. Mavis Armytage

    I leave a comment when I especially enjoy a article on a site or I have something to valuable to contribute to the discussion. Usually it is
    a result of the passion displayed in the article I
    browsed. And on this article PowerShell Script: Check Hub Transport Servers for Back Pressure.

    I was actually moved enough to leave a thought πŸ˜‰ I actually do have 2 questions for you if it’s okay.
    Is it just me or does it appear like a few of these comments come
    across as if they are left by brain dead people?

    πŸ˜› And, if you are writing on additional sites, I’d like
    to follow you. Would you make a list all of all your public sites like your Facebook page, twitter feed, or
    linkedin profile?

  3. Glinda Armbruster

    Hello to every body, it’s my first pay a visit of this blog; this website consists of remarkable and really excellent data for visitors.

  4. stnz

    Hmh, seems like the script doesn’t properly detect cleared problem after reboot. Obviously Exchange doesn’t bother logging a recovery event if it’s rebooted, and that usually fixes the problem.

    Anyone has an idea how to properly take that into account? Not returning error state if time since last error is more than time since last reboot?

  5. Matt

    Does this still work in 2016? I am getting the following error:

    Invoke-Command : One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUr
    parameter, or pass URI objects instead of strings.
    At D:scriptsExchangeBackpressureCheck.ps1:78 char:14
    + $events = @(Invoke-Command Γ’?”Computername $server Γ’?”ScriptBlock { Get-EventLo …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (System.String[]:String[]) [Invoke-Command], ArgumentException
    + FullyQualifiedErrorId : PSSessionInvalidComputerName,Microsoft.PowerShell.Commands.InvokeCommandCommand

    1. Ralph Hogaboom

      Same issue here. I opened it in VS Code, and did a find and replace on the hyphen. It was probably some other character set, and in my English version of Windows 10 Education didn’t work properly. After the find/replace on the hyphen, the script runs.

  6. Luis Reyes

    Thanks Paul Cunningham

    Shell works so well

    Thanks a lot

    Grettings

    Luis Reyes

  7. Gani

    the link to download is not working am getting error Not found, error 404,

    can you please assist please.

    warm regards

    Kamal

    1. Avatar photo
  8. Moray

    Hi, I tried to download the PS1 script but it takes me to a screen with the following and there is no way to download the script. Please help…

    Download the Exchange Server 2010 to 2013 Migration Guide

    Thanks for subscribing to Exchange Server Pro. Here is your free download.

    Download Ebook

    Watch your inbox for more Exchange Server deployment, migration and administration tips.

    In the meantime, why not Follow @ExchServPro on Twitter, or Like Exchange Server Pro on Facebook.

  9. Lars Bornich

    Servers need to have WinRM enabled for Remote Management for this to work. Run the following from an elevated powershell window:

    Enable-PSRemoting -Force

    1. Lars Bornich

      Which you already stated – I need to learn how to read πŸ™‚

    2. 5iks

      Thanks anyway πŸ™‚

Leave a Reply