foreword

Windows PowerShell has the widest range of any language I know. You can quickly learn the basic concepts and use it as an interactive command line shell to write simple, ad hoc scripts. Learn a bit more and you can use it to write rich, sophisticated scripts to manage your most important production servers. Learn a bit more still, and you can write .NET programs to access the awesome power of the .NET frameworks.

When we started to develop PowerShell, I was advised to deliver an interactive shell or scripting language and to avoid .NET programming, because C# and VB.NET had that covered. This had been the standard approach of every OS in the last 30 years. I knew that we could do better. A new architecture based upon a deep rethink of the problem could provide our customers with a single solution which would:

o Allow beginners a quick start and the ability to become advanced users over time, enhancing their careers and salary potential.

o Let advanced users use it in lightweight, ad hoc ways for simple problems and in sophisticated, production-oriented ways for complex problems.

o Create a large community of beginners and advanced users to share experiences, approaches, and scripts.

o Create a large ecosystem which would increase the opportunities for job hunters as well as increase the hiring pool for employers.

Designing and implementing a solution that could do all that was challenging. At times, we had to make some difficult choices, but we were on a mission and we stuck to our vision. This is where Bruce Payette comes in. Bruce is a founding member of the PowerShell team and the development leader of the PowerShell language. I paired Bruce with Jim Truher, a Program Manager (PM) and another founding member of the team. As a PM, Jim was the advocate for the user and the voice of sanity. Bruce and Jim worked incredibly well together, producing the PowerShell language and addressing the many problems that came up. Bruce is a walking encyclopedia of every good, bad, solid, and wacky language idea that has been tried in the last few decades. As issues came up, Bruce explained how the different languages addressed similar issues, where and why they worked well or failed. Bruce was crucial in solving the problems we encountered and in fulfilling our ambitious goals.

Since PowerShell is new, we know that you will have to invest time to learn it. When we added a new concept, technique, or syntax, we did so in a way that allows you to reuse that element everywhere so you can minimize the number of things to learn and maximize the value of each one.

One of my favorite jokes goes like this: Two guys are in the woods when they encounter a bear who decides to eat them for lunch. They are about to run away when one of them stops to put on a pair of running shoes. His buddy informs him that bears can run over 30 mph and that there is no way he can outrun it, even with running shoes. His friend replies, “I don’t have to outrun the bear, I just have to outrun you.”

It is often difficult to understand something you see or read until you understand what motivated it. One of reasons I love Bruce’s book is that, in addition to providing a great language reference, it provides a clear description of the motivations and the thinking behind the language. This is a book that only Bruce could have written.

Jeffrey Snover

Windows PowerShell Architect