PowerShell V3 object creation accelerator

Home > Blogs > PowerShell > PowerShell V3 object creation accelerator

PowerShell V3 object creation accelerator

Like This Blog 0 Jason Helmick
Added by March 19, 2012

When writing an Advanced Function in PowerShell, many admins end their process block with the typical object creation lines to send an object down the pipeline. (I should say the ‘Good’ Admins do)

PowerShell V3 object creation accelerator ProcessBlock
Focus on the last lines 33 and 34. In fact, let me zoom in a little for ya.

PowerShell object V2 2 lines

So, in typical PowerShell V2 fashion, I’m using New-Object to create a PSObject, then I’m splatting the properties to the object. Then next line is Write-Output to send that object down the pipeline. (p.s. you know to never use Write-Host, right?)

This is the typical way that myself and many other admins make the objects in PowerShell V2. In the below graphic is an example of a more consolidated way (almost a one-liner) to achieve the same results.

PowerShell object V2 1 line

So, using a parenthetical on Write-Output, I can shorten my two lines into one. Cool, but to be honest I still prefer the two lines. It doesn’t take that long to type and it just seems more descriptive to me.

This is not the point of the article.

Version 3 of PowerShell promises to be a very refined version of PowerShell V2 with some enhancements. One of the enhancements comes in the way of an accelerator. Now if you’re an admin like me, you probably haven’t used the PowerShell accelerators much, we have cmdlets that perform the tasks, and an accelerator can usually be more confusing to a non-developer admin. That would be me. However notice the new syntax that is available in PowerShell V3 to create objects. Here’s a quick two liner.

PowerShell object V2 2 lines

Of course, you will quickly see there is an easy one-liner that we could make as well.

PowerShell V3 object creation accelerator V3 1 line

 

 

The accelerator is the [PSCustomObject] . Pretty cool huh? It really reduced the typing. Fun!

Hmmm. To be honest this is one of those times I appreciate the new feature, but almost wish it wasn’t a feature at all. The problem I see is that it does reduce the typing, as many of the accelerators are designed to do, but that’s kind of the issue.
In PowerShell, we tell folks when scripting to be very explanatory with their code. It makes reading and understanding the script later to be easier. It’s easier for others to troubleshoot and learn from. If you saw a blog or script and the author typed the following:

Gsv | ?{$_.status –eq “stopped}

The entire PowerShell community would behead that person. They used aliases, they didn’t use parameter descriptions……so on. I agree that at the console, in real-time, using the elastic notation of PowerShell is a true feature, but I agree that it is best to be fully explanatory in your scripts. So, the above line in a script should read;

Get-Service | Where-Object -FilterScript{$_.status –eq “stopped}

See? This is much easier to deal with in a script, and almost as fast to type thanks to Tab-Completion.

So that brings me back to the accelerator. If you’re an IT Admin, with little development experience, what should you do when you start writing a cmdlet with Advanced Functions?

I believe the answer has already been answered. New-Object –TypeName PSObject –Property …

It’s the most descriptive, the easiest to read and troubleshoot, and keeps with the established best practices.

HOWEVER! It is our responsibility to recognize the accelerator syntax, as you will certainly see many others, especially developer oriented folks, use the accelerator in their scripts. So when you see it in the future, you’ll know what it does.

Knowledge is PowerShell,
Jason Helmick
Director of PowerShell Technologies
Interface Technical Training

Videos You May Like

A Simple Introduction to Cisco CML2

0 3877 0

Mark Jacob, Cisco Instructor, presents an introduction to Cisco Modeling Labs 2.0 or CML2.0, an upgrade to Cisco’s VIRL Personal Edition. Mark demonstrates Terminal Emulator access to console, as well as console access from within the CML2.0 product. Hello, I’m Mark Jacob, a Cisco Instructor and Network Instructor at Interface Technical Training. I’ve been using … Continue reading A Simple Introduction to Cisco CML2

Creating Dynamic DNS in Network Environments

0 641 1

This content is from our CompTIA Network + Video Certification Training Course. Start training today! In this video, CompTIA Network + instructor Rick Trader teaches how to create Dynamic DNS zones in Network Environments. Video Transcription: Now that we’ve installed DNS, we’ve created our DNS zones, the next step is now, how do we produce those … Continue reading Creating Dynamic DNS in Network Environments

Cable Testers and How to Use them in Network Environments

0 724 1

This content is from our CompTIA Network + Video Certification Training Course. Start training today! In this video, CompTIA Network + instructor Rick Trader demonstrates how to use cable testers in network environments. Let’s look at some tools that we can use to test our different cables in our environment. Cable Testers Properly Wired Connectivity … Continue reading Cable Testers and How to Use them in Network Environments

Write a Comment

Share your thoughts...

Please fill out the comment form below to post a reply.