Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8054359
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 5, 20262026-06-05T08:07:44+00:00 2026-06-05T08:07:44+00:00

I have the following script that outputs a color coded folder hierarchy of a

  • 0

I have the following script that outputs a color coded folder hierarchy of a user’s Exchange mailbox. It output the line in red if it’s over a certain threshold (20 MB in this case) and gray if not.

#Get Folder Size Breakdown to Table with Color Coding
get-mailbox $username |
Get-MailboxFolderStatistics |
ft @{
        Name="Name"
        Expression=
        {
            $prefix=""
            foreach($c in $_.FolderPath.ToCharArray())
            {
                if($c -eq '/'){$prefix+='-'}
            }
            if($_.FolderSize -gt 20MB)
            {
                $Host.UI.RawUI.ForegroundColor = "Red"
            } else
            { 
                $Host.UI.RawUI.ForegroundColor = "Gray"
            }
            $prefix + $_.Name
        }
    },
    FolderSize,
    FolderandSubfolderSize

There are a few problems with this script.

If the last folder processed is larger than 20 MB, my console text remains Red after it runs.
This script assumes that the original console text was Gray. If it’s not Gray, then I’ve changed the user’s console text.
Both of these are very easy to resolve if you’re not in the context of a format-table expression, but I can’t for the life of me figure out if it’s possible to resolve these issues in this particular case. Here’s the gist of what I’ve tried but it doesn’t work. (In reality I’ve tried about 20 different variations).

get-mailbox $username |
Get-MailboxFolderStatistics |
ft @{
        Name="Name"
        Expression=
        {
            $prefix=""
            $originalColor = $Host.UI.RawUI.ForegroundColor
            foreach($c in $_.FolderPath.ToCharArray())
            {
                if($c -eq '/'){$prefix+='-'}
            }
            if($_.FolderSize -gt 20MB)
            {
                $Host.UI.RawUI.ForegroundColor = "Red"
            }
            $prefix + $_.Name
            $Host.UI.RawUI.ForegroundColor = $originalColor
        }
    },
    FolderSize,
    FolderandSubfolderSize

Note: The purpose of this is to eventually compress this down to a one-liner. I know that I can store the variable before I start the pipeline and the restore the color after the pipeline is finished, but that takes the fun/aggravation out of it. I’m more curious as to whether or not I can accomplish this without altering the basic structure of this pipeline.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-05T08:07:45+00:00Added an answer on June 5, 2026 at 8:07 am

    I don’t think this is possible. Essentially, every time Format-Table reads the Expression for Name the foreground color will change. But Format-Table probably doesn’t write out the value from that expression immediately, so you can’t reset the color in the expression.

    I think you’re going to have to wrap your pipeline:

    $originalColor = $Host.UI.RawUI.ForegroundColor
    
    get-mailbox $username |
    Get-MailboxFolderStatistics |
    ft @{
            Name="Name"
            Expression=
            {
                $prefix = " " * (($_.FolderPath -split '/').Length)
                $Host.UI.RawUI.ForegroundColor = if($_.FolderSize -gt 20MB) { "Red" } else { $originalColor }
                $prefix + $_.Name
            }
        },
        FolderSize,
        FolderandSubfolderSize
    
    $Host.UI.RawUI.ForegroundColor = $originalColor
    

    Another option would be to write your own formatting code that finds the maximum size of each column then uses Write-Host to write things out:

    $stats = get-mailbox $username |
        Get-MailboxFolderStatistics |
    
    $nameMaxWidth = 0
    $sizeMaxWidth = 0
    $subFolderSizeMaxWidth = 0
    $stats | ForEach-Object {
    
        if( $_.Name.Length -gt $nameMaxWidth )
        {
            $nameMaxWidth = $_.Name.Length + (($_.FolderPath -split '/').Length - 1)
        }
    
        $sizeWidth = $_.FolderSize.ToString().Length
        if( $sizeWidth -gt $sizeMaxWidth )
        {
            $sizeMaxWidth = $sizeWidth
        }
    
        $subSizeWidth = $_.FolderAndSubFolderSize.ToString().Length
        if( $subSizeWidth -gt $subFolderSizeMaxWidth )
        {
            $subFolderSizeMaxWidth = $subSizeWidth
        }
    }
    
    $stats | ForEach-Object {
        $colorParam = @{ }
        if( $_.FolderSize -gt 20MB )
        {
            $colorParam.ForegroundColor = 'Red'
        }
    
        $prefix = ' ' * (($_.FolderPath -split '/').Length - 1)
        Write-Host ("{0}{1,$nameMaxWidth}" -f $prefix,$_.Name) -NoNewLine @colorParam
        Write-Host "  " -NoNewline
        Write-Host ("{0,-$sizeMaxWidth}" -f $_.FolderSize) -NoNewLine
        Write-Host "  " -NoNewLine
        Write-Host ("{0,-$subFolderSizeMaxWidth}" -f $_.FolderAndSubFolderSize)
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the following script that runs when a user clicks a link that
I have a #!/bin/sh script that has the following line: if [ ! -x
I have the following script that outputs a shipping amount number depending on what
I have following script that executes all the .reg files in the current directory.
I have the following script that works well in Firefox and Chrome (not sure
I have the following script that changes my image on a timer: var da
I have the following script that successfully retrieves the current track and updates my
I have the following simple python test script that uses Suds to call a
I have the following situation. I have a PHP script that imports a CSV
I have a PHP script that does the following: Uses file_get_contents() to get content

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.