A couple of sentences in the Scripting Guy’s post from yesterday
stuck in my mind:
“I am not certain I have ever met anyone who knows everything there is to know about Windows PowerShell. In fact, I am not certain I have ever met anyone who knows nearly everything there is to know about Windows PowerShell. “
One simple anecdote should put that in context. At the recent PowerShell summit a number of things were demonstrated that had senior members of the PowerShell team saying “I didn’t know you could do that” As an aside similar scenarios played out at the 3 PowerShell Deep Dives in 2011 & 2012.
I’ve been using PowerShell since the early betas for 1.0 & have been an MVP for 6 years and I definitely don’t know everything about PowerShell. I’m learning something new about PowerShell every day.
Think also that it took three of us to write PowerShell in Depth.
There are a whole bunch of modules in Windows 2012 & 2012 R2 I haven’t had time to paly with yet. Add in the PowerShell functionality in SharePoint, Exchange, SQL Server plus all the other Microsoft and third party products and no one can know all there is to know about PowerShell.
One of the great joys of working PowerShell is that there is always something new to learn. Sure, you’re building on what you already know but even the core PowerShell engine can bring surprises.
I’d be highly suspicious of anyone claiming to know everything about PowerShell.
I was thinking on the plane back from the PowerShell summit about the CRUD activities. They are a concept we have inherited from the database world:
C = Create
R = Read
U = Update
Create, Update and Delete correspond directly to the PowerShell verbs – New,Set and Remove respectively.
The Read action corresponds to the Get verb.
Well sort of.
Get-* is used in two distinct scenarios. Firstly we know of an object and we we want to read its properties – for example:
Get-Process -Name powershell
We are reading the information about the PowerShell process. That corresponds directly to the Read action in the CRUD paradigm.
However, we also use Get* when we want to Discover the processes that are running:
In which case we are Discovering the processes that are running.
I think its time to update the CRUD concept and make it DCRUD where D stands for discovery.
In this post http://msmvps.com/blogs/richardsiddaway/archive/2011/07/17/can-i-should-i.aspx I stated that PowerShell isn’t necessarily the right answer to every problem.
I was left a comment asking if I could expand. I’ll do that over a series of short posts as I think of examples.
One of the first that comes to mind is legacy scripts.
VBScript never really caught on as a mainstream administration tool. There were a number of reasons for this:
- non interactive
- harder to use and debug
- less information
- less flexible
- admins addicted to the GUI
- less pressure on people i.e. more admins
However, a number of organisations created a significant number of scripts and performed some very clever stuff.
Now, the question for those organisations is this -
“PowerShell has appeared. Do I convert all those scripts, that work really well to PowerShell?”
My answer would be no! Learn PowerShell first . Get really proficient. Develop new stuff in PowerShell and migrate the legacy scripts when they need an over haul (or you get some free time) that way you get the best of both worlds and run the smallest risk when you come to migrate the legacy scripts.
The question “Can I do X with PowerShell?” comes up very frequently.
PowerShell provides access to a huge range of functionality:
- Microsoft and third party products
Usually the answer is “Yes, you can”
What doesn’t seem to be considered so often is the question “Should I do X with PowerShell?”
If you don’t have alternatives then by all means try it but if there are better ways to accomplish the task then consider them.
If all you have is PowerShell everything looks like a script