The SQL team has been receiving a lot of bashing lately over some of the decisions they made integrating PowerShell into SQL 2008. I thought I would take a couple minutes to clarify a few things, eat some sin and talk about a constructive engagement model between the community and the feature teams implementing PowerShell cmdlets.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
First let me declare my long standing admiration for the SQL team. Those superstars have consistently been one of the teams that really GOT what it meant to release software for production environments. They have a great quality culture and process and they have top-shelf leadership that reinforces this across the board. SQL has been the gold standard of great scripting because their GUIs produce scripts that you could harvest for reuse (yes it wasn't full coverage but they GOT IT years before anyone else). They are a great team - full stop.
The majority of the heartburn has come from SQL's use of MiniShells. A MiniShell is a non-extensible version of PowerShell with a set of baked in Cmdlets and providers. Some of my best community friends have pointed to SQL's use of MiniShells as evidence that they "don't get it". This is not correct. I told the SQL team about MiniShells and recommended that they use them because I thought they were a good fit for the sort of production-oriented value proposition they provide their customers. So direct your criticisms at me on this one.
First let's talk about MiniShells and why they exist. During the Vista reset, there was a great deal of anxiety about .NET versioning and general angst about instability arising from plugin models where code coming from the various sources run in the same process. Imagine the case where you load plugins from 10 different sources and then something goes wrong - who is responsible? Who do you call for support? MiniShells allow teams to address these issues by creating fixed execution environments that built in our labs and fully tested/verified before release. If you have a problem with a SQL PowerShell and call PSS, the first thing they are going to do is to have you try to reproduce the problem using the SQL MiniShell. (NOTE: In my experience, 9 out of 10 times that you have a problem with multiple plugins in a process comes from bad memory management - a problem largely [but not completely] managed out of existence by the CLR.)
The problem is not that SQL shipped a MiniShell but rather that there are SQL UX scenarios that use the MiniShell instead of a general purpose PowerShell. The SQL Management Studio GUI has context menus which launch their MiniShell. This is where we made a mistake. By definition, this is an escape out to an environment to explore and/or perform ad hoc operations. This environment does not benefit from the tight production promises that a MiniShell provides, in fact it is hampered by them. Because the MiniShell is a closed environment, you can't even manually add snap-ins. This is what sent people’s meters into the red - and understandably so.
Sadly it is too late to make this change for SQL 2008 but the SQL team will change this at their next opportunity. In the meantime, when you are at the MiniShell prompt, you can just launch regular PowerShell with a console file that contains whatever snapins you want to use (including the SQL snapins - they can be added to a PowerShell session). Clearly this is less than optimal but it is not onerous either. We are working with the SQL team on the PowerShel V2 designs to make sure that we can offer teams like SQL the safety/production quality they need while providing the customers the flexibility they want.
Let's take a minute and talk about the engagement model. I've encouraged the community to complain loudly when we screw up and aren't giving you want you want/need. No one benefits by you suffering in silence. In that regard, I can say that the MiniShell firestorm has been a big success. That said, for complaints to be actionable, they need to arrive in time to be acted upon. I'm sure that someone can point to a blog or email somewhere that pointed this out a long time ago but the reality is that it didn't pop as a problem until recently and now it is going to have to wait until the next cycle to get fixed. The good news is that the community feedback mechanism works, we just need to improve the timing.
One last note about tone. I've often joked that complaints were critical and politeness was desirable but optional (in other words, I'd rather get a rude complaint than polite silence). Let me take a moment to tweak that guidance a little. PowerShell is our passion and our day jobs and we'll endure almost anything to get the information we need to make this the best product ever. So that engagement model is totally applicable to the PowerShell team. That said, PowerShell is not the feature teams day jobs. In the case of the SQL team, it was a stretch goal pursued because of the passion of a small set of individuals (Michiel Wories in particular). The bottom line is that it is still critical to complain but when you complain about the feature team's support of PowerShell, just double check the tone and try make it constructive. Above all, let them know that you appreciate their efforts (just don’t get so wrapped up that you forget to include the complaint J)
Cheers!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
When you use the Get-Credential cmdlet, you get a GUI dialog box to enter the credentials. This is the "Common Criteria Certified" way of handling credentials. It is also a pain in the butt at times. If you are an admin, you can alter this and request credentials via the command line as follows:
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />PS> $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds"
PS> Set-ItemProperty $key ConsolePrompting True
PS> Get-Credential
cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
Credential
User: ntdev\jsnover
Password for user ntdev\jsnover: **************
UserName Password
-------- --------
ntdev\jsnover System.Security.SecureString
Enjoy!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
SDMSoftware has just released a Group Policy Health Cmdlet HERE.
They have a great, high-quality, 9 minute DEMO VIDEO showing what the cmdlet does and how to work it.
Nice stuff.
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Marco Shaw is hosting the 6th PowerShell Virtual User Group meeting on June 24th. (See http://marcoshaw.blogspot.com/2008/06/windows-powershell-virtual-user-group.html for details and sign-up). He has graciously allowed Wassim and I to present some of the new post-CTP2 things that the PowerShell team is working on. This should be an excellent opportunity to see the latest and greatest and also to provide us with feedback on these new features.
I'm going to be talking about the new Modules feature in PowerShell V2. Modules are essentially a replacement for the old V1 snap-in concept. We haven't talked a lot about modules in public yet so I asked Marco for a chance to remedy that. JayKul had a blog posting http://huddledmasses.org/powershell-modules/ a while back that has pretty good coverage of what's in CTP2 so I'll be looking at what we expect to see in the final product.
Wassim Fayed will be presenting an update on remoting, including some new and advanced features that will be in the final product.
Hope to see you all there!
-bruce
-----------------------------------------------------
Bruce Payette, Principal Developer, Windows PowerShell Team
We looked at a lot of CLI models when designing PowerShell. One of them was netsh. One of the things I had a love/hate relationship with was netsh's use of context. In netsh, you can set context via navigation and then you don't need to provide that context on the command line. For instance you navigate into the FIREWALL and then you perform a set of operations and you don't need to say that you are working on the firewall because it picks it up from the context.
I thought I would experiment with this a little this morning. I don't know if this is useful or not but it shows a couple of interesting scripting techniques so I thought I would share it anyway. This is PUSH-NOUN.PS1. You can push a NOUN context and then you don't need to specify that noun for the first command in a command sequence - you just specify the verb. You type "?" for help, "exit" to exit and "! cmd" to escape and execute a command directly. The examples will make it more clear.
First the code:
# Push-Noun.ps1
# Sets a context which allows you to work on a noun similar to the way NETSH does
# WORKS WITH V1
param($noun)
while ($true)
{
Write-Host "[$Noun]> " -NoNewLine
$line = $host.UI.ReadLine().trim()
switch ($line)
{
"exit" {return}
"quit" {return}
"?" {Get-Command "*-$Noun" |ft Verb,Definition -Auto |out-host}
{$_.StartsWith("!")}
{
$Cmd = $_.SubString(1)
Invoke-Expression $cmd |out-host
}
default {
$Verb,$args = $Line.Split()
$Cmd = "$verb-$Noun $args"
Invoke-Expression $cmd |out-host
}
}
}
Now let's run it:
PS> .\push-noun service
[service]> ?
Verb Definition
---- ----------
Get Get-Service [[-Name] <String[]>] [-ComputerName <String[]>] [-Include <String
New New-Service [-Name] <String> [-BinaryPathName] <String> [-DisplayName <String
Restart Restart-Service [-Name] <String[]> [-Force] [-PassThru] [-Include <String[]>]
Resume Resume-Service [-Name] <String[]> [-PassThru] [-Include <String[]>] [-Exclude
Set Set-Service [-Name] <String> [-DisplayName <String>] [-Description <String>]
Start Start-Service [-Name] <String[]> [-PassThru] [-Include <String[]>] [-Exclude
Stop Stop-Service [-Name] <String[]> [-Force] [-PassThru] [-Include <String[]>]
Suspend Suspend-Service [-Name] <String[]> [-PassThru] [-Include <String[]>]
[service]> get a*
Status Name DisplayName
------ ---- -----------
Running AeLookupSvc Application Experience
Running ALG Application Layer Gateway Service
Stopped Appinfo Application Information
Running AppMgmt Application Management
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
[service]> get |where {$_.name -match "^A" -AND $_.Status -eq "stopped"}
Status Name DisplayName
------ ---- -----------
Stopped Appinfo Application Information
[service]> !gps *ss
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
673 8 2308 6636 70 6.75 492 csrss
539 7 16044 21460 190 149.98 540 csrss
1633 16 11040 17680 68 67.47 656 lsass
866 5 3976 5720 33 2.56 548 psxss
33 1 312 760 5 0.08 428 smss
[service]> exit
PS>
Note that given the mechanisms we have, this only really works with the first command in the sequence. Image that you wanted to do something like:
PS> Get | where {$_.name -match $test} |STOP
Where STOP did not have to specify the NOUN. You really can't do that today. We have been thinking about exposing a TOKEN-NOT-RESOLVED event which would call a user-defined function which would allow you to do runtime fixups. If we had that mechanism in place, you could do this. Hmmmmmm.
Enjoy!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Yup- that's right. Check it out at superstar Karl Prosser's blog HERE. He even has a video of it working.
The blog is somewhat of a tease in that he is going to wait till tomorrow to tell us how he did it.
I'm constantly amazed by what the community can do if you give them the right tools!
Thanks Karl!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
By far, the most frequently asked question at TechEd 2008 was, "When will PowerShell V2 Ship?". We are expressly prohibited from answering that question and I know that that can be frustrating. I can say this:
We are now feature complete with V2. History has shown that when we reach this stage of development, it takes us a year, plus or minus a quarter, before it is generally available.
Let me be quick to add that past performance is NOT an guarantee of future performance. At the end of the day, we have an extensive quality process and the community lets us know when it is ready to ship.
The second most frequently asked question was, "When is the next CTP?". We have not booked a plan for that yet. That said, people have observed that we have often tried to coordinate important things with IT Forum in Nov.
Cheers!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
I mentioned that one of my favorite TechEd 2008 talks was Ben Pearce's talk, "Windows, PowerShell and WMI - Unveiling Microsoft's Best Kept Secret".
Attached is Ben's presentation. You can get his demos at the following locations:
http://blogs.technet.com/benp/archive/2008/06/12/tech-ed-2008-demo-1-administering-windows.aspx<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
http://blogs.technet.com/benp/archive/2008/06/12/tech-ed-2008-demo-4-administering-hyper-v.aspx
Enjoy!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
One of my favorite TechEd 2008 talks was Ben Pearce's talk, "Windows, PowerShell and WMI - Unveiling Microsoft's Best Kept Secret". It was a great talk all up but the one thing I walked away saying, "I've got to steal that", was Ben's explaining of Objects.
Anyone that has every tried to explain PowerShell to friends or co-workers will inevitably come across a look of fear and panic when you mention the word "Object". I've seen it hundreds of times. I explain how objects actually simplify the problem but after seeing Ben's talk, I realized that the problem might be that some people don't even know what an object IS. Here are Ben's slides for how to explain objects (and arrays of objects) to people that don't understand them.
I've also attached the PPT slides so you can use them as well.
10,000 thanks to superstar Ben Pearce - you really moved the ball forward with this one!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Let me start by first apologizing for sharing some information that you are not going to be able to go out and try right away. During one of the interactive Q&A sessions at TechEd, people asked about working with Web Services. I referred to a feature that we were working on and then Hal Rottenberg asked me to blog about some of the details. I'm not sure that this is a good idea because while we have it coded up and in the nightly builds, that is not a guarantee that it will make it into the next version (we often have to cut features in order to create bandwidth to increase the quality of other features). That said, I'm going to go out on the limb a bit and share with you what we are working on.
First let's start with motivation (you should always start with motivation. If you know WHY someone is doing something, it is easier to get things in focus and provide meaningful feedback). PowerShell is ALL about helping you get your job done with the minimal amount of effort (I've been thinking about calling this the "Cheap EATs" model where EAT stands for "Effort to Accomplish Task"). With that comes the observation that we live in an evolving world. To accomplish your task, you need to easily access a wide range of technologies. That is why we invest in giving you great access to WMI, ADSI, COM, XML, .NET, ADO, etc etc. More and more things are now available as Web Services so we want to make it easy for you to get at them as well.
As such, we have speced and implemented the cmdlet: New-WebServiceProxy. This command connects to a Web Service and generates a .NET proxy to that service. Let me show you how it works using a web service which works with USZIP codes (http://www.webservicex.net/uszip.asmx ):
PS> $ws=New-WebServiceProxy -uri http://www.webservicex.net/uszip.asmx?WSDL
PS> # NOTE - the output of the next command was edited for clarity
PS> Get-Command New-WebServiceProxy -Syntax
New-WebServiceProxy [-Uri] <Uri> [[-Class] <String>] [[-Namespace] <String>]
New-WebServiceProxy [-Uri] <Uri> [[-Class] <String>] [[-Namespace] <String>]
[-Credential <PSCredential>]
New-WebServiceProxy [-Uri] <Uri> [[-Class] <String>] [[-Namespace] <String>]
[-UseDefaultCredential]
PS> $ws=New-WebServiceProxy -uri http://www.webservicex.net/uszip.asmx?WSDL
PS> $ws | get-Member
TypeName: Microsoft.PowerShell.Commands.NewWebserviceProxy.Autogenerated
Types.WebServiceProxy4979207ebservicex_net_uszip_asmx_WSDL.USZip
Name MemberType Definition
---- ---------- ----------
Disposed Event System.EventHandler Disp...
Abort Method System.Void Abort()
BeginGetInfoByAreaCode Method System.IAsyncResult Begi...
BeginGetInfoByCity Method System.IAsyncResult Begi...
BeginGetInfoByState Method System.IAsyncResult Begi...
BeginGetInfoByZIP Method System.IAsyncResult Begi...
CreateObjRef Method System.Runtime.Remoting....
Discover Method System.Void Discover()
Dispose Method System.Void Dispose()
EndGetInfoByAreaCode Method System.Xml.XmlNode EndGe...
EndGetInfoByCity Method System.Xml.XmlNode EndGe...
EndGetInfoByState Method System.Xml.XmlNode EndGe...
EndGetInfoByZIP Method System.Xml.XmlNode EndGe...
Equals Method System.Boolean Equals(Ob...
GetHashCode Method System.Int32 GetHashCode()
GetInfoByAreaCode Method System.Xml.XmlNode GetIn...
GetInfoByCity Method System.Xml.XmlNode GetIn...
GetInfoByState Method System.Xml.XmlNode GetIn...
GetInfoByZIP Method System.Xml.XmlNode GetIn...
GetLifetimeService Method System.Object GetLifetim...
GetType Method System.Type GetType()
InitializeLifetimeService Method System.Object Initialize...
ToString Method System.String ToString()
AllowAutoRedirect Property System.Boolean AllowAuto...
ClientCertificates Property System.Security.Cryptogr...
ConnectionGroupName Property System.String Connection...
Container Property System.ComponentModel.IC...
CookieContainer Property System.Net.CookieContain...
Credentials Property System.Net.ICredentials ...
EnableDecompression Property System.Boolean EnableDec...
PreAuthenticate Property System.Boolean PreAuthen...
Proxy Property System.Net.IWebProxy Pro...
RequestEncoding Property System.Text.Encoding Req...
Site Property System.ComponentModel.IS...
SoapVersion Property System.Web.Services.Prot...
Timeout Property System.Int32 Timeout {ge...
UnsafeAuthenticatedConnectionSharing Property System.Boolean UnsafeAut...
Url Property System.String Url {get;s...
UseDefaultCredentials Property System.Boolean UseDefaul...
UserAgent Property System.String UserAgent ...
PS> $ws.GetInfoByZIP(98072)
xmlns Table
----- -----
Table
PS> $ws.GetInfoByZIP(98072).Table
CITY : Woodinville
STATE : WA
ZIP : 98072
AREA_CODE : 425
TIME_ZONE : P
PS> $ws.GetInfoByAreaCode(425).table |ft -auto
CITY STATE ZIP AREA_CODE TIME_ZONE
---- ----- --- --------- ---------
Snoqualmie WA 98065 425 P
Woodinville WA 98072 425 P
Bellevue WA 98004 425 P
Bellevue WA 98005 425 P
Bellevue WA 98006 425 P
Bellevue WA 98007 425 P
Bellevue WA 98008 425 P
Bellevue WA 98009 425 P
Bellevue WA 98015 425 P
Bothell WA 98011 425 P
Bothell WA 98012 425 P
Bothell WA 98021 425 P
Bothell WA 98041 425 P
Bothell WA 98082 425 P
Carnation WA 98014 425 P
Duvall WA 98019 425 P
Edmonds WA 98020 425 P
Edmonds WA 98026 425 P
Everett WA 98201 425 P
Everett WA 98203 425 P
Everett WA 98204 425 P
Everett WA 98205 425 P
Everett WA 98206 425 P
Everett WA 98207 425 P
Everett WA 98208 425 P
Hobart WA 98025 425 P
Issaquah WA 98027 425 P
Issaquah WA 98029 425 P
Kirkland WA 98033 425 P
Kirkland WA 98034 425 P
Kirkland WA 98083 425 P
Lake Stevens WA 98258 425 P
Lynnwood WA 98036 425 P
Lynnwood WA 98037 425 P
Lynnwood WA 98046 425 P
Maple Valley WA 98038 425 P
Medina WA 98039 425 P
Mountlake Terrace WA 98043 425 P
Mukilteo WA 98275 425 P
North Bend WA 98045 425 P
Preston WA 98050 425 P
Ravensdale WA 98051 425 P
Redmond WA 98052 425 P
Redmond WA 98053 425 P
Redmond WA 98073 425 P
Renton WA 98055 425 P
Renton WA 98056 425 P
Renton WA 98057 425 P
Renton WA 98058 425 P
Renton WA 98059 425 P
Enjoy!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Smith Catar was looking at my Tech Ed demos and noticed that I used block comments. These are not in the CTP that you have so I guess I sorta let this one leak out. Yes - V2 will have BLOCK COMMENTS!!!
Block comments start with "<# and end with "#>". e.g.
<#
This is
a
block comment
#>
Happy happy.
Block comments - you asked for them, you'll get them.
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Nitin Bhat the WMI PM recently pointed HERE to answer the question, how do know what OS SKU a machine is running?
You can run the expression $((gwmi win32_operatingsystem).OperatingSystemSKU) to the the value and then look it up on that table.
I decided to turn it into a script you can use. It is rock-simple but it saves you the typing and there's some value in that. I've included it below and attached it as well.
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
$sku = $((gwmi win32_operatingsystem).OperatingSystemSKU)
switch ($sku)
{
0 {"Undefined";break}
1 {"Ultimate Edition";break}
2 {"Home Basic Edition";break}
3 {"Home Basic Premium Edition";break}
4 {"Enterprise Edition";break}
5 {"Home Basic N Edition";break}
6 {"Business Edition";break}
7 {"Standard Server Edition";break}
8 {"Datacenter Server Edition";break}
9 {"Small Business Server Edition";break}
10 {"Enterprise Server Edition";break}
11 {"Starter Edition";break}
12 {"Datacenter Server Core Edition";break}
13 {"Standard Server Core Edition";break}
14 {"Enterprise Server Core Edition";break}
15 {"Enterprise Server Edition for Itanium-Based Systems";break}
16 {"Business N Edition";break}
17 {"Web Server Edition";break}
18 {"Cluster Server Edition";break}
19 {"Home Server Edition";break}
20 {"Storage Express Server Edition";break}
21 {"Storage Standard Server Edition";break}
22 {"Storage Workgroup Server Edition";break}
23 {"Storage Enterprise Server Edition";break}
24 {"Server For Small Business Edition";break}
25 {"Small Business Server Premium Edition";break}
default {"<UNKNOWN:$SKU>"}
}
The Best of Tech Ed 2008 were awarded and PowerGUI won Breakthrouth Product of the Year.
WOW what an honor and acknowledgement of great work!
Congratulations to Dmitry, Kirk and the rest of that team! You guys have brought a lot of great visibility to Quest Software. Your bosses should be fetching you cups of coffee and getting you bigger offices :-)
If you aren't already running PowerGUI - what are you waiting for?
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Eric White just posted an amazing set of Cmdlets on CodePlex. They allow you to use PowerShell to manipulate OpenXML documents to do all sorts of fun things, like create graphs from the output of PowerShell, automatically generate documents from XML, and extract comments from a document. Below is an 8-minute video introducing you to the technology and a blog post with more details.
PowerTools for Open XML Introduction (Video)
Blog:
Enjoy,
James Brundage [MSFT]
Kirk Munro posted a blog entry HERE saying how thrilled he was at level of presence PowerShell had at TechEd 2008.
It was a VERY good TechEd for PowerShell. There were lots of breakout sessions, lots of hands on labs and interactive Q&A, lots of vendor support in the exhibit, lots of books, quite a few mentions in keynote demos and presentations. That was all great but what impressed me the most was the number of people that said how PowerShell had saved their butts, made them heros with their peers or allowed them to do things that they could never do.
It reminded me of this great Iron Chef America episode with Wolfgang Puck. The show took 3 big name chefs and gave them a surprise ingredient (eggs) they then had 60 minutes to prepare a full course meal that highlighted that ingrediate. The meals are then served to a panel of judges for comment and evaluation. When it was Wolfgang's time to be judged, the judges were all raving about the presentation, the wonderful smell, the rainbow of colors. Wolfgang in a quasi-irritated, quasi-exasperated voice said, "Yes, but what about the FLAVOR?!"
At the end of the day, if PowerShell didn't save butts, enable heros, an empower new scenarios - it would have been a waste of time and resources.
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
PowerShell Plus has now officially released V1.0. Actually I'm late in my congratulations, they actually released it on March 6th.
If you haven't checked out PowerShell Plus, you definitely should take advantage of their free 30 day trial and see what you are missing. This is a really impressive piece of creative engineering.
You can learn more about it HERE.
Congratulations to Karl and Tobias on a job well done!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
The creative guys at Sapien are thinking outside the box again. They are offing a new hybrid approach to online training for PowerShell. You sign up for a class and get some self-study materials but you also have an online class that meets twice a week for an hour (you have a choice of a couple of timeslots). The course runs for 2 to 4 weeks depending upon the topic. Very clever stuff. You can find out more at the following links:
www.scriptinganswers.com/training/online
http://www.scriptinganswers.com/training/ilt/
BTW - you probably already know that BillG is a big fan of creative education delivery. At last year's Technical Recognition Event (TRE), he invited George Lucas to discuss the topic (apparently George is a big fan of this as well).
This year's TRE was in large part a going away party for Bill. Bill gave a fantastic talk about his foundation, the challenges ahead both in the SW industry and the world in general. At some point he started talking about batteries and got super excited saying that he was VERY optimistic about the future of batteries and if you want more you should go watch the MIT Solid State Chemistry lectures which are online on the web. He even gave us the course # 3.091. He said, "it's a 35 hour investment but well worth it". (Professor Sadoway - Bill Gates loved your lectures!)
Now just step back a second and let that sink in.
Bill Gates.
(Once) the richest guy in the world. Has a family. Is SUPER hands on (often it feels like HEELS ON :-) ) when it comes to setting the technical direction for the company and keeping track of progress. Runs one of the largest foundations and is hard core focused on SOLVING (NOT "improving") some of the biggest health problems facing mankind. All that and he is investing 35 hours watching video lectures about solid state chemistry over the web.
It blows my mind!
(BTW - I started watching those lectures and the guy is REALLY good.
Also - while we are on the topic of great internet lectures - I loved Lisa Pruitt's Structural Aspects of BioMaterials over at the Berkely site.)
Anyway the reason for that diversion is to point out that novel education and training delivery is a growing area and can be quite effective. I'd love to hear from anyone that takes this training.
Cheers!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
If so SPEAK UP NOW. The Windows SDK team is looking for feedback on whether this would be useful. Check out their request for feedback at: Influence the future of Windows sdk - Powershell based build environment
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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
Ragnar Harper is a senior consultant and Advisor at Crayon AS in Norway. Ragnar is also a big fan of PowerShell. Recently he won a demo contest putting PowerShell through its paces. At one point he did an import-csv of a large file and created Active Directory entries. This took a while so while that was going, he used Guitar Hero and jammed to the following latest and greatest edition of Highway to PowerShell. This is REALLY good stuff. Check it out:
http://video.msn.com/video.aspx?mkt=en-us&vid=b75260ae-1736-4b15-8b86-aaef20644e52
10,000 thanks for sharing that Ragnar - you've made my day!
Just wait till you see V2!
Jeffrey Snover [MSFT]
Windows Management Partner Architect
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