Showing posts with label formatting. Show all posts
Showing posts with label formatting. Show all posts

Wednesday, March 07, 2012

Pluralsight Course–Formatting with PowerShell

I’ve just finished creating my latest course for Pluralsight, entitled Formatting with PowerShell. The course looks at how you can get great output from PowerShell  - including both defaults and what you can do to improve your output.

Formatting, to my mind, is the art and science of presenting data to your target audience. Great looking output not only is easier to read and consume, but it often gives (possibly unearned) credibility!  PowerShell does a lot of things by default, making it the superior tool for the IT Pro. This course shows you how you can get the most out of what PowerShell provides by default, but also what you can do to over ride these defaults.

The course has 6 modules:

Module 1 – Introducing .ToString(). The core of PowerShell (and .NET) formatting is the .ToString() method. I regard the .ToString() method as the basis for all formatting in PowerShell, so it’s important to understand this .NET feature. The module looks as using .ToString to format numbers, dates, time spans and enums.

Module 2 – Composite Format Strings. This is a feature, leveraged from within .NET that I use a lot. We look at what makes up a composite format string and how to use the –f operator to format strings.

Module 3 – Formatting In the Pipeline. This module looks at how you can use the Format-* commands to format objects coming from the pipeline.

Module 4 – Using Hash Tables. Hash tables can be used to improve the output, particularly output generated by Format-Table and Format-List. We look at these hash tables and provide examples as to how they work.

Module 5 – Format Files and Display XML. Default formatting in PowerShell is based on format files and display XML. This module looks at how you can write your own format files, both to change default output and to create new views for your own, or existing, data types.

Module 6 – Other Output Mechanisms. This final module looks at the other ways you can data out of PowerShell, including using the Out-* cmdlets, CSV and CliXML for persisting objects and both HTML and Office document output.

Each module has demos, best practices and provides a great summary. The course material includes the slides and all the demos which you get depending on what level of Pluralsight membership you have.

The course is finished and is going through the production phase which shouldn’t take too long – I expect the course to be on the web site this week. I have to say, the guys at Pluralsight are pretty good not only about making sure the course is high quality, but that all the bits are where you want them! I’m impressed overall with their people and their process. They make me want to write more material for them!

And a call out to TechSmith (www.techsmith.com). The course is recorded using Techsmith’s Camtasia and the screen shots captured using Techsmith’s SnagIt product. I could not have recorded this course without these two great products. If you are developing presentation or training course material, you should be looking at these two products. Once you have them, you’ll fall in love with them!  Thanks TechSmith!!

Wednesday, February 09, 2011

Formatting of Repeating Groups in PowerShell–Two Neat Tricks

When you use Format-Table to create a table from a pipeline/variable, you’ll find that PowerShell truncates the output of a column. Here’s a simple example

 

PSH [C:\foo]: Get-Process | Group company | Sort count | Select –Last 2 | Format-Table

Count Name                       Group
----- ----                       -----
   18 Microsoft Corporation     {System.Diagnostics.Process (conhost), ...
   51                           {System.Diagnostics.Process (ApMsgFwd),...

 

As you can see, PowerShell has truncated the Group colum to just show one member of the group. Note that ’ve deliberately truncated the width of the console to produce this output to avoid Blogger from ‘helpfully’ wrapping the column when you read this post – if you try the pipeline you’ll likely see a few more.

Here’s the first neat tric: To get more output you can use the –wrap parameter on the call to format Table

PSH [C:\foo]: Get-Process | Group Company | Sort Count | Select –Last 2 | Ft -wrap


Count Name                      Group
----- ----                      -----
   19 Microsoft Corporation     {System.Diagnostics.Process (conhost), System.Dia
                                gnostics.Process (conhost), System.Diagnostics.Pr
                                ocess (conhost), System.Diagnostics.Process (dwm)
                                ...}
   51                           {System.Diagnostics.Process (ApMsgFwd), System.Di
                                agnostics.Process (audiodg), System.Diagnostics.P
                                rocess (csrss), System.Diagnostics.Process (csrss

Now this better, but this still truncates the group to just 4 entries. What if you want to see more? To to that, and here’s the second neat trick, you need to set a preference variable, FormatEnumerationLimit. You set this variable to the number of group entries you want to see. By default PowerShell sets this to 4. If you set it higher, you will see something like this:

 

PSH [C:\foo]: $FormatEnumerationLimit = 10

PSH [C:\foo]: get-Process | group company | sort count | select -last 2 | ft -wrap


Count Name                      Group
----- ----                      -----
   19 Microsoft Corporation     {System.Diagnostics.Process (conhost), System.Dia
                                gnostics.Process (conhost), System.Diagnostics.Pr
                                ocess (conhost), System.Diagnostics.Process (dwm)
                                , System.Diagnostics.Process (explorer), System.D
                                iagnostics.Process (explorer), System.Diagnostics
                                .Process (ielowutil), System.Diagnostics.Process
                                (msnmsgr), System.Diagnostics.Process (msseces),
                                System.Diagnostics.Process (OUTLOOK)...}
   51                           {System.Diagnostics.Process (ApMsgFwd), System.Di
                                agnostics.Process (audiodg), System.Diagnostics.P
                                rocess (csrss), System.Diagnostics.Process (csrss
                                ), System.Diagnostics.Process (Idle), System.Diag
                                nostics.Process (inetinfo), System.Diagnostics.Pr
                                ocess (lsass), System.Diagnostics.Process (lsm),
                                System.Diagnostics.Process (MDM), System.Diagnost
                                ics.Process (mqsvc)...}

In this case, you new see 10 members of the group and not the default of 5. Were you to set $FormatEnumerationLimit to, say, 1000, then you would see up to 1000 entries. If you look at the variable (Get-Variable FormatEnumerationLimit | FL *), the description of this variable says: “Dictates the limit of enumeration on formatting IEnumerable objects”. This is a 32-bit integer so you could set it higher than 1000, although that's probably a bit OTT. Setting it to say 100 in your profile is probably good enough for most things.

Thanks to Alexandar for pointing me to this preference variable. For more information on this and the other PowerShell prefernce variables, you can get-help on about_perferencevariables.

Friday, January 28, 2011

Powershell WebCast–Formatting in PowerShell

As I wrote earlier this week, on Wednesday night (well night in the UK!), I delivered PowerShell.Com’s first webcast. The webcast was a huge success – we had a total of 1350 people signed up to attend. At the peak we had just over 675 users watching (about par for the course in terms of attrition!). If you were amongst those who missed any or all of the web cast, or just want to re-see part of it, the web cast itself is posted to PowerShell.com (http://powershell.com/cs/media/p/8773.aspx). I’ve also posted my slides and demo code to my website – www.reskit.net/powershell/formatting.zip.

Enjoy!

Tuesday, January 25, 2011

Webcast: Formatting with PowerShell

Tomorrow, 26 January, I’ll be presenting a web cast of formatting with PowerShell. Those kind forks at Idera, sponsors of PowerShell.Com, have organised an on-line webcast where I’ll be looking at formatting with PowerShell. As of this afternoon, over 900 folks  have signed up for the event!! The webcast is live at 18:00 GMT (19:00CET). For the US folks, that works out to 13:00 EST and earlier further west.

The webcast examines how you format output using PowerShell. It’s aimed at a 250 technical level presentation. I first look at default formatting and using Format-Table and Format-List (and Format-Wide). I’l exmine .NET Composite formatting strings and PowerShell's -F operator – these enable you to format individual values into output strings. I’ll then move gears and look at using hash tables with Format-Table and Format-List to provide more precise control over the formatting of tables. I’ll also spend time answering your questions.

To find more about the webcast, and to sign up to attend, see: https://www2.gotomeeting.com/register/626513458. I hope to see you all there!

Sunday, December 03, 2006

Customising PowerShell

I came across an interesting article entitled Customizing Windows PowerShell. It's a little rambling, but it looks at some cool ways you can customise PowerShell's look and feel. It discusses customising the built-in display XML files to change the way PowerShell displays things. In order to make this work, the author looks at how you can re-sign these files.

As is pointed out by Lee Holmes in a comment, rather than edit (and re-sign) the default XML, create your own XML files, add your own formatting definitions, and then override the default ones. Lee points out a good resource: http://www.leeholmes.com/blog/DESCRIPTIONSupportInMonadPart3.aspx.