We're at Microsoft TechEd IT Forum in Barcelona, 2007. And we've got someone else excited to talk with for a little bit. Would you like to introduce yourself? Sure. I'm Jeffrey Snover. I'm the architect for Windows PowerShell. And so, what is PowerShell exactly? Sounds very powerful. It is. Great name. So, Windows PowerShell is our next-generation command line shell and scripting language. So, it's as interactive and composable as the traditional shells, k-shell and bash. But it's programmatic as, say, Perl and Ruby. And then it has production qualities like AS400 or CL. And then we expose the object stores of Windows as file systems. So, it's easy to find all this stuff and manipulate it. So, essentially, it's a scripting language. And a shell builds around that scripting language for the Windows. Yeah, but it's really focused in on the interactive use. So, it's focused in on that interactive shell experience. And the big thing that differentiates PowerShell from everything else is our pipelines of objects. Right. In the traditional shell, you pipeline text. And so, then you've got to parse all this text, all this prayer-based parsing. Lots of grepping and knocking and everything. Exactly. And it's great stuff. But, man, when you just want to get the job done, it's a pain in the butt. So, we pipeline objects. And whereas that sounds like scary, oh my God, objects. In fact, it just dramatically simplifies the tasks of the registration. Right. It basically accesses everything in the CLR, if I remember, right? Yeah. I mean, you kind of have access to all the .NET objects. Yep. But then, also, everything outside of that. So, WMI. Right. We invoke traditional stuff. Get their text. We do text parsing. You bet. There's still stuff that does that. Support WMI, COM, ADSI, ADO, XML, and the entire .NET framework. Right. It's this universal blue language. What does Microsoft use it for? Oh, we're using it for--it is basically our strategy for the automating all of our operating systems and products. Right. So, it's what's called a common engineering criteria, which means you're in the server and tools business. You want to ship the product in 2009?
2:00You have to have PowerShell support. Right. And by PowerShell support, that means exposing different functions on whatever the software is you're working on. Exactly. Let's say your component is manageable via PowerShell. Right. The other thing is that all of our strategy now is to layer our admin GUIs on top of PowerShell. So, I mentioned scripting language is an engine, but it's also an engine that can be hosted by other language--by other executables, in particular, your admin GUI. So, now you write your admin GUI, lay it on top of PowerShell. Your GUI is a subset of the things you can do in the command line. Oh, right, right. So, not only is there a text interface, but you can have a--does the GUI--you have to code the GUI, or does it kind of figure out what the GUI would look like on top? Yeah. No, you have to code the GUI. For now. That's still a GUI. That's nice. Yeah. It's dramatically simpler. Right. Because all your logic's in the--in the--in the--in the automation engine. And then your GUI's a very thin layer. So, it reduces the amount of testing you have to do, the amount of coding. If you have to go from one GUI framework to another, it's really simple to do because all the--the tough stuff's in the logic. Right. How long has PowerShell been out for now? One year. Exactly one year. And the--the adoption rate's been, like, amazing. Yeah, yeah, yeah. Yeah. Before--about this time last year, we were sitting around saying, "Oh, how many people will adopt it?" And somebody said, "Oh, I bet you'll have a million downloads in a year." And I said, "My friend, let me explain how this works." These things take a long, long, long time. Right. And boy, was I wrong. Right, right. We had a million and a half downloads in a year. So, do you know, like, what types of people have been downloading it? Yeah. So, it's--it's across the board. So, it's developers. It's IT pros. People are running it in production. MySpace was running it in production six months before we released it. Oh, right. They were using an RC, like a beta or something, right? Yeah. Exactly. And so, now we see more and more customers using it in production. Right. So, that's an interesting example. I mean, what--what does--what does MySpace use PowerShell to accomplish? Yeah. Automation. Before that, they had a very manual process. Right. And so, they said that they were able to go--you automated their entire system using PowerShell.
4:03Right. And because of that, they were able to go from 1,000 servers to 4,000 servers. Right, right. So, automation in this instance, I mean, what do you mean exactly by automation? Just to clarify. Sure. So, something goes wrong. Right. You know, now I've got to go change a bunch of things. So, they have scripts that say, you know, find me all the things that have this condition. Right. And perform this operation on it. Right, right. So, it's sort of like batch operations over a bunch of different machines or objects or whatever. Yeah, exactly. And they wrote their own GUI on top of it. So, they've got their own GUI. Right. They're on top of their command line interface. And it's sweet. It does exactly what they want it to do. Right. So, I mean, that gets to one sort of interesting cultural thing. I mean, it doesn't seem like scripting has been huge in the Microsoft area. Even though there's VBScript and batch files and everything like that. Sure. And, I mean, do you think, first off, do you think that perception is kind of true that there wasn't much scripting? No. And then, if it is true, can you see that people are taking up scripting a lot more? Yeah. Like, being more Unix-like, if you will? Yeah, absolutely. In the sense that, you know, VBScript is great. But if you actually go and take a look at a VBScript. Right. It's essentially what I like to call systems programming parentheses. Right? Yeah, yeah. So, you take a look at the script and it's this horrible WebM Connect with all these things. And then you get this object. And it's all these, like, detailed, really fine-grained stuff. Right. But then, wait. I'll make it simple by your if statement doesn't have that parentheses. Right. Like, that was the problem. So, yeah, I don't think that enough scripting has been done on Windows. But I believe that's because we've tried to make it much too hard. Right, right. In fact, it's really been simple programming. And then with PowerShell now, that's not at all the case. You know, you can start off with the GUI. If you like the GUI, that's great. You have the GUI. But then the GUI can teach you the command line. Right. You have the command line of these nice, high-level task-oriented abstractions. So, you can stay there. If you need to access something via com or XML or .NET or whatever, you can do that.
6:03But in general, you want to have nice, high-level abstractions. And frankly, everybody likes that. The nice thing about it is then, because you do that, you know, here's the deal. It's Friday night, and you want to be out with your wife watching a movie. And something goes wrong, right? Two choices. One, fly in, you know, click, click, click of the mouse. Right. Or, you have some monitor that's watching some event and runs a script for you automatically. Right, right, right. Right? You choose. Another aspect that's kind of easy to gloss over is the, I mean, how do you hook up PowerShell script to, like, events like that? Yeah. Or to the alarms? I mean, is that, is that just, you just add it as an execution task, or what's that? Yeah, that's exactly correct. You say, you just say PowerShell, and then minus command, and the command you want to run. Right. And then I assume that whatever's executing it passes in a bunch of some variables that it can use to get context. Yeah. You pass that. Right, right, right. Just in the command line. And so, so the last thing is, so since PowerShell's been out for a year, and obviously was in, you know, beta and release Canada for a little while before that, so what, what are some, some other non-Microsoft people that are using it? Yeah, so we've got great adoption in the community. Of course. So, F5, the guys who do the network stuff, they've done it. Quest Software's supported it. Citrix has recently announced in their conference that they'll be supporting it. Right. If you take a look at VMware, in their conference, they showed support for it. Right. They're showing up all over. If you go down to the, uh, environment here, there are folks that have, uh, group policy command lads. Yeah. Full Armor has this wonderful, uh, designer where it's a workflow and PowerShell together to run book automation. Yeah. And are, are they actually, actually executing that in the context of their own system, or, or making, like, operations manage or execute it, or, or? No, in the context of their own system. Oh, right, right, sure. So, they have, like, their own run book or something, and the run book stuff executes it. Yep. Right, right. So, the last question, this is one I get asked a lot, is, so, what's the state of remote operation of PowerShell? Yeah. The sense that I'm on one machine, and I want to execute on these three different machines.
8:05So, we've got great news there. Uh, we just released, this week, our CTP of version 2. And that, what, what's the CTP? Oh, Community Technology Preview. Right. So, the thing is, other people call it an alpha. Okay? Right. But it's Microsoft, so I call it a CTP. Yeah, yeah. And, uh, it has what we call this universal code execution. Actually, our first steps on a universal code execution model. And there, it's not just remote. It's the thing that says, I have code, and I want to run it. Sometimes I want to run it here, and sometimes I want to run it there. Right. And sometimes I want to run it to a bunch of machines. Sometimes those machines are over a local area network, sometimes over a wide area network. Right. Sometimes I want to run it and get the results immediately. Sometimes I want to run it and get the results asynchronously. Sure. Sometimes I want to run it under my current credentials. Sometimes I want to provide my set of code. You want to FD to someone else or whatever, right? Exactly. So it's kind of universal code execution model where you have code and you can run in lots of different places and lots of different conditions. Right. Over time we'll add things like, I'd like to run this at this time, every day, etc. Right, right. In the past, the remoting was done commandlet by commandlet, and now I have uniform support for you. All the version one stuff gets remoting for free. Right. We do the remoting. So it sounds like if you want to start playing around with remoting, that's available now, you can get the CTP, right? Yeah, exactly. And then, by the time you've figured it out, it'll probably, well, it'll be closer to being a final release and not just an alpha. Exactly. Well, then, now the great thing about the CTP is it's early enough that if you have comments, you have a very good chance of getting those comments active on it. Right, right. By the time we get to beta, basically, you know, if it's a real big problem, no one can address it. But if you just sit there and say, hey, you know, you ought to have done it this way or this would be a better way to do it, by the time we get beta, it's really hard to make those changes. Yeah, yeah, absolutely. That gets pushed off to the next release, right? Exactly. Yeah. Thanks for the update. I really appreciate it. Excellent. Thanks.