Viewing Truncated PowerShell Output

Sometimes PowerShell truncates output, and if you don’t realise what’s going on, you’ll never get it to show.

Where you’re expecting potentially lots more text, PowerShell replaces it with a single lousy ellipsis, cruelly taunting you.

Column Width

If it’s just a column width problem, the fix is simple enough: just pipe to out-string and add the width parameter.

Before:

PS > Get-CsAnalogDevice | ft Identity,RegistrarPool

Identity                                                          RegistrarPool
--------                                                          -------------
CN=Public Telephone,OU=RTC Special Accounts,DC=contoso,D... lync2010.contoso.local
CN=Linksys ATA,OU=RTC Special Accounts,DC=contoso,DC=local  lync2010.contoso.local
CN=HOTLINE,OU=RTC Special Accounts,DC=contoso,DC=local      lync2010.contoso.local
CN=Paging Speaker,OU=RTC Special Accounts,DC=contoso,DC=... lync2010.contoso.local

After:

PS > Get-CsAnalogDevice | ft Identity,RegistrarPool | out-string -Width 160

Identity                                                                         RegistrarPool
--------                                                                         -------------
CN=Public Telephone,OU=RTC Special Accounts,DC=contoso,DC=local            lync2010.contoso.local
CN=Linksys ATA,OU=RTC Special Accounts,DC=contoso,DC=local                 lync2010.contoso.local
CN=HOTLINE,OU=RTC Special Accounts,DC=contoso,DC=local                     lync2010.contoso.local
CN=Paging Speaker,OU=RTC Special Accounts,DC=contoso,DC=local              lync2010.contoso.local

Collections / Arrays

… but what if that doesn’t fix it?

It might be that the object you’re looking at is an array (a “collection”), and PowerShell is only showing the first few entries in that array, rather than the lot.

Here, the fix is to change the $FormatEnumerationLimit value. If you type it on its own into PowerShell the current value – probably 3 – will be returned. If you set a new value of -1, it’ll output ALL entries in your collection.

PS > $FormatEnumerationLimit
3
PS > $FormatEnumerationLimit=-1

Before:

PS > Get-CsCertificate

Issuer           : CN=contoso-CA, DC=contoso, DC=local
NotAfter         : 6/07/2013 5:09:37 PM
NotBefore        : 17/02/2012 7:04:52 PM
SerialNumber     : 1234567890ABCDEF
Subject          : CN=lync2010.contoso.local, OU=IT, O=contoso, L=Sydney, S=NSW, C=AU
AlternativeNames : {sip.contoso.net, lync2010.contoso.net, lync2010.contoso.local...}
Thumbprint       : 1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF
Use              : Default

After:

PS > Get-CsCertificate

Issuer           : CN=contoso-CA, DC=contoso, DC=local
NotAfter         : 6/07/2013 5:09:37 PM
NotBefore        : 17/02/2012 7:04:52 PM
SerialNumber     : 1234567890ABCDEF
Subject          : CN=lync2010.contoso.local, OU=IT, O=contoso, L=Sydney, S=NSW, C=AU
AlternativeNames : {sip.contoso.net, lync2010.contoso.net, lync2010.contoso.local, dialin.contoso.net, admin.contoso.net, meet
.contoso.net, LyncdiscoverInternal.contoso.net, lyncweb.contoso.net, Lyncdiscover.contoso.net}
Thumbprint       : 1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF
Use              : Default

 

Credit: This post is largely a re-write of this AWESOME Poshoholic gem.

Here’s a TechNet post with a few more formatting tips.

 

24 Comments

  1. This is the correct answer!
    Also, PS’ Format-Table will truncate a columned response after that entry’s first 4 items. So if you were looking up a prefix list of addresses you’d only see the first four of them, with the feared ellipses following.

    But this breaks that problem as well. Good work

  2. Sill problems with “$FormatEnumerationLimit=-1”. I fixed width size not that usable in my case
    “””
    $logName = ‘Microsoft-Windows-DNS-Client/Operational’

    $log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration $logName
    $log.IsEnabled=$true
    $log.SaveChanges()
    $FormatEnumerationLimit=-1
    Get-WinEvent -LogName Microsoft-Windows-DNS-Client/Operational | where { $_.ID -gt 1010 }
    “””

    • $FormatEnumerationLimit = -1
      Clear-Host
      Get-WinEvent -LogName ‘System’ -FilterXPath ‘

      *
      [System
      [(
      (EventID >= 4608 and EventID <= 4609)
      or EventID=4624
      or EventID=4634
      or EventID=4647
      or (EventID >= 4778 and EventID <= 4779)
      or (EventID >= 4800 and EventID <= 4803)
      )]
      ]
      [EventData
      [Data
      [@Name=”SubjectUserName” or @Name=”TargetUserName”] and (Data=”username”)
      ]
      ]

      *[
      EventData[(Data[@Name=”LogonType”]=”7″)]
      ]

      ‘ | Out-String -Width 500

    • Hi Mark,

      Great question, but I don’t think you’re going to like the answer. I think you’re going to hit the same brick wall I did when I was trying to manually control column widths in https://greiginsydney.com/compare-objects-ps1/

      Check out the two images in this tweet: the first is the problem I was trying to solve, and in the code extract in the next image is the bit you THINK is your salvation, the “width=” code.

      that code snipped will work beautifully on your Windows 7 and 8 test machines, your servers … and then you’ll test it on Windows 10 and it will all turn to kaka – the first image.

      The apparent cause is a deliberate change the P$ team made:
      “When you use the Format-Table command, table columns are now automatically formatted by evaluating the first 300ms of data that passes through the stream.” – and that seems to mean it’s *ignoring* your hard-coded widths.

      Things might have changed since then, as I’ve not revisited it.

      i wish you the best of luck!!

      – G.

      • One more for you: if you’re REALLY keen, P$ MVP Kirk Munro suggested this:

        “Out of curiousity, have you tried defining the layout in a format.ps1xml file to see how well that works?

        Have a look at Get-Service — that command returns strictly formatted data. Strictly formatted data using format.ps1xml files does not get undone by the 300ms “smart formatter”.”

        I didn’t go there as it seemed like an ENORMOUS amount of effort to go to for my little script.

        – G.

Leave a Reply

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

... and please just confirm for me that you're not a bot first: Time limit is exhausted. Please reload the CAPTCHA.

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