Automating the world one-liner at a time…
I’m watching a cool talk by Greg Kroah Hartman about the Linux Kernel. He just said something that I absolutely LOVE and feel great kinship towards. He said that the joke in the Linux community is that “Linux is not ‘Intelligent Design’, it’s ‘Evolution’. Which means we react to stimuli that’s happening in the world … we don’t over-plan things”. I think that is a great mindset.
This is one of the things we wanted to achieve with PowerShell, to give you the tools that allowed you to respond to the world as it changed instead of us trying to deliver a fixed scenario and then if the world changed, you tell us and hang in their for 3 years until the next version of the software comes out. In other words, provide you the tools that allow you to evolve your solution as your environment changes.
This approach has always caused quite a bit of heartburn with a number of people at Microsoft – the “Intelligent Designer” if you will. Their heads and hearts are in the right place and they feel like we should spend enough time with customer’s to really nail the scenario and then ship that. What they don’t realize is that 30 minutes after you leave a customer’s building, their scenario changed. The boss changed his mind, there are new things (HW, SW, networking, apps, etc) that you need to work with, there are new regulation you need to comply with, etc etc etc.
I like to tease people with the Intelligent Designer mindset, saying that we are going to fix that in the next version of PowerShell when we ship the cmdlet:
> Do-MyJob -OrderPizza Pepperoni,Onions -MailCheckTo $HomeAddress -WakeMeUp 5:00pm
After all, anything other than that isn’t really meeting my true scenario. :-)
Jeffrey Snover [MSFT] Distinguished Engineer Visit the Windows PowerShell Team blog at: http://blogs.msdn.com/PowerShell Visit the Windows PowerShell ScriptCenter at: http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx
Any software project has elements of "evolution" and "intelligent design," but I think it's the design side that is PowerShell's strength and how it distinguishes itself from Unux. For example, PowerShell is far more consistent than Unix shells precisely because such consistency was a firm design principle.
Dan's blog yesterday about the standardized verbs reinforces your point well.
Very true, I can remember when I had to write a PS extension to get file version info that lived in the GAC. I can't tell you how handy it is to be able to do that and not have to wait for a cmdlet to ship.
You might need to change the cmdlet, Do-MyJob, to match the new verb requirements. An alternative like Complete would probably work in its place. ( Complete-MyJob ) ;)
As to the Evolution vs Intelligent Design, I agree I would rather have a power and flexible framework rather one that met the initial needs but is inflexible. That said, there are times when an admin gets very frustrated to see an OS company telling us to use a third party for simple tasks.
For example, in V1, many blogs said that PowerShell would be great for DBAs. It would allow them to use the data from the command-line and automate their jobs. The problem was V1 didn't include a way to access a database. V2 also doesn't have a way to access a database. Of course their are many third party solutions that give that capability to V1 and V2, including from the SQL Server team. But it would still be great to have a basic built-in command like Invoke-ADOCommand for generic access to data. Because sometimes it isn't about having the best tool, but having one that's good enough. I'm sure there are people out there who would love to get data from a .mdb file, without having to grab a script from the web that may or may not work.
But the framework of PowerShell is very powerful and flexible, so I was able to write a script, Invoke-SQL.ps1, that let me get to our SQL data. It even ended up being more powerful than the Invoke-SQLCmd from the SQL Server Team (Multiple result sets, Container Objects, Parameters,...). So even though I sometimes get frustrated, I really enjoy PowerShell and use it all the time and wouldn't give up its flexiblility for better command coverage.
Thanks for the good work and a great product.
Really nice post, it's nice to see that you have that mindset.
So let me ask for a little bit of evolution: Every time I want to edit part of the line I'm standing on and step left until the cursor is at the position I want to edit, the cursor disappears after each keypress and I have to wait for the flash to see if I'm at the right position. This gives me a slight headache every time I use cmd and powershell, it seems like an obvious thing to "fix".
@Stephen - I totally agree that the OS should ship with a TON more stuff that "just works" and this this mindset should never be taken as a "Get Out of Jail Free" card. (I actually got one of those once from a cop but lost it somewhere along the line.)
@Marcus - the whole cmdline editing experience is still quite poor because we gave it a lower priority and just leverage what Console gives us. We all hate it.
you tell us,..
So there is some god involved there who agrees on design, lets call it inteligent design bij MS
(altough i think its ok)
I wonder whats next, autocomplete, click on a verb with your mouse and a helpfile popups.. where did all the fancy rocking stuff went?
Maybe take a look at MAC OS, maybe not that automated but its way cool. (altough i dont like apple's marketing).
What I simply love about Powershell is that it is simple enough for a "non-dev" to be creative and make his / her job useful, simple and productive with, but (like Legos) can be added and expanded in so many ways in the Development community. It allows Developers to take something they work in (.NET) and produce an interface with a simplistic command structure for Infrastructure guys.
Can you imagine before Powershell, writing an ASP.NET application and having to say to Infrastructure "Ok, make one user, no problem... Ok automate? Oh nuts" with Powershell they can extend what they know to a pseudo code form and hand off to a guy like me saying "Ok, bunch of users? Well we have this new-WebappUser commandlet, if you want to import a bunch of people or manipulate information en-masses here's the basics, you take it from there" and it's doable.
I'm not nixing powershell, but it does allow us to Adapt as *WE* the users need to manage our systems not how somebody THINKS we should use it.
That's the beauty of it.
Thanks Microsoft for Powershell.
I may never be a Dev, but Powershell allows me to code and be an ITPRO and not be thrown into the nether regions for crossing both arts.
the Energized Tech