Category Archives: Training


Series – Microsoft Certification the PoSh way – 70-411 – Part 1

Richard’s Log, Stardate 2457170.5

Our destination for today is a introduction on Microsoft Certification, the PoSh way.

As an IT Professional, I am trying to keep myself constantly up-to-date, and with that comes certification. Currently I’m working on my MCSE: Server Infrastructure certification, and specifically on the preparation for exam 70-411.

In all of the Microsoft exams you have several objectives. These objectives consists of several tasks you should be able to execute. These exams are heavily GUI driven, and sometimes you have some shell questions. But as a PowerShell geek, I also want to know how to do the several tasks measured in the exam with PowerShell. Is it necessary to pass the exam? No, but it’s fun to learn a bit beyond the horizon, true? :)

I am going to write up a serie of articles, and each article will zoom in on each task included in each objective, and how to administer it with PowerShell. Hopefully, this not only give you a understanding of the task itself, it will also teach you how to use the existing PowerShell functionality in your daily work.

To start the serie, I will write articles on the following objective of the exam 70-411:

Deploy, Manage and Maintain Servers

which consists of the following sub-objectives and tasks:

  • Deploy and manage server images
    • Install the Windows Deployment Services (WDS) role; configure and manage boot, install, and discover images; update images with patches, hot-fixes, and drivers; install features for offline images; configure driver groups and packages
  • Implement patch management
    • Install and configure the Windows Server Update Services (WSUS) role, configure group policies for updates, configure client-side targeting, configure WSUS synchronisation, configure WSUS groups, manage patch management in mixed environments
  • Monitor servers
    • Configure Data Collector Sets (DCS), configure alerts, monitor real-time performance, monitor virtual machines (VMs), monitor events, configure event subscriptions, configure network monitoring, schedule performance monitoring

My purpose is to write one article per sub-objective, to get some scoped topics. I will need to see how this is going to work out in terms of time, but I will do my best to put coverage on all of the objectives in the exam.

Watch out for the first post in this series for the sub-objective Deploy and manage server images. In that first article I will zoom in into using the Server Manager Cmdlets, the Deployment Services Cmdlets and the Deployment Imaging Servicing Management (DISM) Cmdlets.

Disclaimer: I will show also a lot of screenshots, in which you will see me using ISESteroids. This just because I love the product. :)

Till next time, and live long and prosper!

6th Dutch PowerShell User Group Event 2015 Recap

Richard’s Log, Stardate 2457169.5

Today’s destination is the Recap for the 6th Dutch PowerShell User Group 2015.

Now in my hotelroom nearby Schiphol, rethinking all the awesome content I saw today, and the great talks from IT PROFESSIONALS like:

And last but not least, the absolute IT rockstar:

  • Jeffrey P. Snover,Distinguished Engineer and the Lead Architect for the Windows Server Division,Inventor of PowerShell @ Microsoft – ( Twitter / Personal Website )

The day kicked of with a short keynote from Jeff Wouters. He was allowed to give away some prices from the sponsors, like a discount on software from Sapien Software, and a free license for the Sapien Software Suite. He also gave away a license for ISESteroids from Tobias Weltner.

After this it was time for the first session of the day, and this session was all about the cool stuff you can do with OneGet (now officially called PowerShell Package Manager); which is a ‘package management manager’. It allows you basically to do what was already possible in *nux systems for years. That is, grabbing and install software packages from either external or internal repositories. For a deep dive on Package Management I would recommend you to watch this great MVA course: Package Management and Workflow Automation

Next up was a session from Bartek Bielawski on making WMF4 acting like WMF5, in terms of partial configuration. He showed us a solution based on AST (Abstract Syntax Tree). Bartek wrote a nice article on AST a while back, check it here: Hey, Scripting Guy! Blog. Bartek will maybe share the code which he showed to us, depending on the permission of his company. Keep a eye on this, highly advanced stuff!

After this Ben Gelens went crazy on the topic of ‘Lessons Learned: Introducing DSC Configuration into an existing environment’. He went deep into the security considerations of setting up a secure Pull server, with very sleek demo’s. He showed us how to secure the complete communication, based on certificates, between the LCM and the Pull server. I think this session was recorded, so hopefully we get the chance to see it online somewhere.

Stefan Stranger went up next, on the topic of Azure Extensions, and on the DSC Extension in particular. This was a nice session to see, on how to use DSC on Azure IaaS VM’s. Quite easy and straight forward. I recommend you to read more about this in this blog post: Introducing the Azure PowerShell DSC (Desired State Configuration) extension.

Next was a session from Jeff Wouters, on a solution he made himself, called ‘MONK’. I’m not sure if I can elaborate on this, but it’s a very interesting solution for consultants. I recommend you to contact Jeff for more about this.

Also Jeff showed us a nice demo of ISESteroids, a must-have tool for any serious PowerShell professional! It provides great features like autoindenting, refactoring, a function browser and much and much more. Check out the website from Tobias: ISESteroids

For the last session of the afternoon we had Bartek again, on using DSC in Linux. Man, what a superb session was this! Bartek showed us how to install the OMI package, in order to be able to talk to a Pull server. I recommend you to start with this blog post from Bartek: PowerShell DSC for Linux Released

In the meanwhile, Jeffrey Snover also entered the building. I have to say, that was a exciting moment for me, to meet the man in person. Jeffrey is a idol for me, he has a inspiring influence on me. The man just does a fantastic job at Microsoft. During dinner we talked a bit on adoption of PowerShell in general. The point made by Jeffrey was that either a SysAdmin learns how to use PowerShell, of gets into the lumber business. 😉 Also he had a nice argument on security in PSRemoting; why you would not trust PSRemoting, while you do trust other Management products? Something to think about, the next time you have a discussion again about security in PSRemoting.

After dinner it was time for Jeffrey to deliver a session. He did it in the format of Q&A, which is working really well in small groups I think. He fired up PowerShell ISE as his ‘notebook’ (what else 😉 ) and started with the question: “who has a question?”. And he started jotting down all the questions which came from the audience. The questions were these:

Jeffrey then elaborated on these questions and made a nice comprehensive story of it. Jeffrey can present, for sure! If you want to have the answers he gave to the questions, I’m sorry, but I didn’t note those answers down. One big takeaway from this session is that when you buy new server hardware, make sure the NIC is RDMA enabled! This will greatly improve the overall speed of the hardware.

Last but not least, we got some nice stickers from Jeffrey:


Jeff also mentioned for me that we are doing a project on putting up the PowerShell Manifesto on Penflip. I uploaded the whole manifesto, and soon you will see the annotations coming from Don Jones and Timothy Warner. You can also make your contributions, just go to the Penflip project page Monad PowerShell Annotated, and help us out with extending this document with explanations and links!

I would recommend you to go to the next DUPSUG meeting, should be somewhere in Q4 this year.

That’s it for now folks! Live long and prosper!


PowerShell… An exciting frontier…

PowerShell… An exciting frontier…

These are the voyages of a PowerShell adventurer.

Its continuing mission:

To explore strange new cmdlets…

To seek out new modules; new parameters…

To boldly go where no one has gone before!”

Richard’s log, stardate 2457163.

Our destination for today is my very first post on As you can see, from the opening lines, I approach my journey in PowerShell as a exploration into the unknown, just like the crew of Star Trek, Next Generation did. Till now my journey has been a pleasant one, because you know, exploring PowerShell is a lot of fun! And your exploration should also be a lot of fun, for that reason I want to share with you my discoveries and experiences. These will help you, I hope, to boldly go where no one has gone before!

About Me, And A Statement

My name is Richard Diphoorn, and I’m a IT Professional based in the Netherlands. I work now for around 14 years in IT. My daily work consists mostly of automating, scripting, provisioning new servers, working with System Center, Azure Pack, SMA. Actually everything which can be automated, is that what I am working on. I believe in automation, it’s in my opinion the mindset every IT professional should have.

When I started working in IT, it was not called IT in the Netherlands, it was called ‘automatisering’; in english it’s called ‘automation’. And there you have it, the job I’m doing was always ment to do automation. But still I see a lot of ‘click-next-admins’ around in the field. This term has been thrown up by Jeffrey Snover, and what it means is that there are administrators who click their way trough provisioning and configuration situations, instead of trying to automate this.

It’s my personal quest, to get the intention into the click-next-admins, to learn and use PowerShell. I strive for a transitional change in the admin’s life, by giving them new perspectives on how to ‘do’ things.

For sure I am not the person who possesses all the knowledge, but at least I want to share my passion and the knowledge I build up till now, with the people who are open for it. And with this I invite you, to do together this exploration into ‘strange new cmdlets’. 😉

A Small Introduction

So, with this personal statement I kick off this first post. Our first mission is the exploration of what this thing ‘PowerShell’ actually is, which kind of advantages it brings to you, and why it’s here to stay.

I assume ‘level 200’ as the basic level of my audience, therefore I will not go into the very basics of how you operate a Windows Operating System. I try to avoid unclear technobabble as much as possible, but I don’t want to oversimplify things. I try to make it as simple as possible, but not simpler (where did we heard that before…hmmm…).

Monad, A Brief History Of Time.

If you are like me, you probably bought a little book called ‘Monad’, written by Andy Oakly, quite some years back (if I remember correctly, I bought this book somewhere late december, 2005. I saw this little book on a bookshelf in Waterstone’s, in London. I bought the book because I heard of MSH, and I wanted to learn more about it.

I was hooked. 100%

I still encourage people to read this book, because a lot of information in that book is still relevant, in term of concepts. Topics like the Pipeline, Verb-Noun syntax, cmdlets, repeatability and consistency did not changed from the first version of Monad that the PowerShell team released. This is also the reason why you still see ‘C:\windows\system32\WindowsPowerShell\v1.0’ on all the Windows OS’es till now. This is because the underlying architecture did not changed. As we will continue to explore, you will see what I mean.

This book will explain to you the very first basic concepts, but for really getting into the dirt, I encourage you to read the Monad Manifesto, written by Monad’s architect, Jeffrey Snover. This manifesto explains the long term vision behind Monad, and describes many elements which are consisting today in PowerShell. This is really a comprehensive document on how Jeffrey first saw the big problems that existed in the way administrators did their work.

He explains the new approaches to different kind of models, and how existing problems be solved with these new approaches. This document will also contributes in your way of thinking the ‘DevOps’ way, because many concepts in here contribute directly to the way you should ‘do’ DevOps. For example, Jeffrey talks about ‘prayer-based parsing’, which is in direct conflict with predictability in certain DevOps scenarios.

Because you need to be able to predict what is happening when you go from Testing to Production. In all cases Deus Ex Machine situations needs to be prevented. You always need to know what is happening and why. In my opinion, DevOps is nothing more than just being really good in automating stuff, PowerShell gives you this possibility.

So, what is PowerShell, and how do I benefit from it?

PowerShell basically is a Shell ( a black box, in which you can type 😛 ), in which you can interact with every aspect of the Operating System in either a interactive or programmable manner.

You type commands in a specific format in this window, and magic happens. This is the simple explanation. Now the rest…

The concept of a shell in which you can manipulate the whole windows system in a interactive way or scripted way, with common syntaxes and semantics, was for me a really powerful and inspiring idea. This new shell helped me working more efficient, effective and with more fun. It enabled me to explore the whole OS, to boldly go where I never have gone before!

This concept is not new for the mainframe operators and the *nix admins; it’s something they are used to already for a long time. If you doubt if working on a command line is a bad thing, go and talk with the *nix admin in your company. They happily will show you how fast they can work, I’m sure!

So for you, as a Windows Administrator, what kind of benefits do you get from learning PowerShell? There are obvious benefits like getting stuff done more quickly, and doing it always in the same way so that you never make that one mistake again. A more un-obvious benefit is that you get to know the OS & Apps very well, because sometimes you really dig into the system, really deep. This level of knowledge can and will benefit you in terms of understanding how a system works, and how to resolve problems. This hugely contributes to your personal success in your career, because you are ‘the topnotch’ engineer. You will be the Geordi La Forge of your company, so to say. :)

PowerShell is dead, long live PowerShell!

PowerShell is here to stay, rest assured. Almost all the products made by Microsoft can be manipulated with PowerShell in one way or another. This by providing a direct API to the product itself, or either by providing a REST interface. A lot of products from third-party suppliers also support PowerShell, like VMware, NetApp and Citrix. PowerShell is really getting (or already is) a commodity; actually I advice customers to only buy products which can be manipulated with PowerShell.

Be honest here, if a product cannot be automated, how does this product contributes to the WHOLE business? The business thrives by efficient processes, and if all IT processes are efficient, the business profits hugely from that.

In every company where I have been till now in my IT career, make use of Microsoft software. I believe in the best tools for the job. PowerShell is such a tool. It’s ducttape, wd400 and a swiss knive in one, whatever you want to do, PowerShell can do it (and better).

PowerShell is here to stay my fellow IT pro’s, embrace it fully and enjoy the voyage!

I want to thank the crew at to give me the opportunity to blog on this site!

Till next time, when we meet again.

A Crowdsourced PowerShell Proficiency Exam

I wanted to call your attention to Smarterer, a company recently acquired by my employer, Pluralsight. Smarterer’s schtick (apart from vexing my auto-correct) is that the host crowdsourced technology assessments. In other words, the community decides what questions to ask someone in the test.

The magic is that their back-end engine, over time, figures out which questions are awesome and which ones suck, and adjusts the assessment accordingly. So as more people (especially qualified ones) take the test, the better it gets at identifying skilled people. It gives it a sort of built-in immunity against bad community-contributed questions, because those eventually filter out of the assessment that’s delivered to people. It’s pretty engaging, actually. I’ve had some fun taking some web development-oriented assessments, and surprised myself in a few places.

They’ve got a PowerShell assessment. Why not jump in, take it, and then add some questions of your own? Next time you need to interview someone for PowerShell chops, send ’em to Smarterer.

Our NaNoWriMo Challenge: Write a PowerShell Article

In honor of National Novel Writing Month (NaNoWriMo), I wanted to offer a smaller, and more unique, challenge.

Send me a PowerShell article.

Seriously. My name is Don Jones, and this is, so you can probably figure out how to contact me. Send me an article between 800 and 3,000 words (including code) in Microsoft Word format. Don’t attach any scripts. Please keep the formatting super-simple: paste code from the PowerShell ISE, and use Word’s default styles otherwise. If you must include screen shots, please embed them in the doc, but also include them as a a separate PNG in your e-mail.

You can write about anything, provided it’s PowerShell-related. What’s best? Some challenge that stumped you – and that you eventually solved (and please, tell us how). Something that you think folks could benefit from, or could learn to do better. Even an article that lays out both sides of a particular question, and outlines the pros and cons of each argument. Doesn’t matter. What matters is that you write. 

I will personally commit to reading every single one, and providing you with feedback on your article. When suitable, I’ll make some specific suggestions for improving the article. If you then fix it up accordingly, I’ll run it by a professional editor – and I’ll have it published. In some cases, we’ll publish it right here on In other cases, I’ll submit it to my friends at 1105 Media for their consideration in one of their IT magazines, like Redmond Magazine or Still others will go into the TechLetter, which would be a huge help to our editors, who are always hungry for content.

Being able to communicate well is important in all walks of life, but being willing to share is even more important. Think you’ve got nothing to share? Wrong. You have unique experiences that everyone can learn from. You do not need to be an expert in order to have something valuable to share. We would all benefit a lot more if more people shared their experiences and successes – so now it’s your turn.

The deadline is November 30th, of course, and I’ll work my way through them all as quickly as possible. You’re not going to be judged on your grammar or spelling (although do use Word’s tools to help those as much as it can). Don’t try to write fancy, or overly formal. In fact, just write like you’d talk. Read your piece back to yourself aloud, and if it sounds weird, fix it so it doesn’t. If it sounds good, it’ll read well.

C’mon. Take up the challenge. And tweet folks over to this article, too. Let’s make it a thing. My goal is to help at least a few folks because regular bloggers, either here or elsewhere, and my dream is to find maybe a couple of folks who can pick up a full-time column with a magazine or other publication. That’d be awesome. I know you’re out there – let’s get the party started.


Attend a Beta “Advanced PowerShell” Class Live or Remote

As you may know, I helped developing the forthcoming Microsoft Official Courseware 10962A class, “Advanced Windows PowerShell.” It’s a 3-day class that includes an overview of DSC, a full day of scripting and toolmaking, a Workflow overview, error handling and debugging, and more. It’s meant as a direct follow-on to the 5-day 10961 course. We’re scheduling a beta teach through a Microsoft training center in mid-August 2014. It’ll be taught by MCT Jason Yoder, who’s an excellent trainer (and who attended PowerShell Summit North America 2014 a few weeks ago, so you know he’s jiggy with PowerShell).

There will likely be a fee to attend live or remote, as you’ll get the complete “A” rev of the course. If you think you might be interested, go to and sign up. Once the full class info is online, we’ll e-mail you and let you know where to go find it – we won’t share your info with anyone else, including the training center.

Do this quickly – the class will likely fill up.

BETA PowerShell Lab Guide for Classes

I’ve been working on a new lab guide for my classes, and thought I’d share an early version. Note that this may become unavailable at any point; the final version will go on, as the lab guide corresponds largely with Learn Windows PowerShell in a Month of Lunches and Learn PowerShell Toolmaking in a Month of Lunches, as well as with several of the free ebooks here on

Also note that there is no slide deck. I hate slides and don’t use them in class, so I haven’t produced any slides. I do use a few diagrams in class (I load them into an iPad app called AirSketch, which “broadcasts” to my computer’s web browser, allowing me to show those images on the screen, and to whiteboard on them as needed), and those diagrams are replicated in the lab guide for students’ convenience.

This new guide is designed to be more standalone than the ones I’ve used in the past. Each lab includes background and syntax reminders, designed so that students don’t have to take notes while the instructor is demonstrating things. That way, everyone can focus on the demos. I basically review each lab myself before I start a unit, and then just teach and demo what’s covered in the lab. Students then get the lab itself as a reminder, and exercises to cement what they’re learning. In many of my classes, this guide is the only thing students have in front of them, and it works well with my teaching style.

At 119 pages, it’s a pretty substantial guide – and I have about nine more units to write, plus an additional four I plan to develop in the future.

You can download the guide in PDF form. Again, this link may go dead at some point when I’m done with the guide, and officially post it on Right now, I’m very interested in what you think. It’s designed to present very concise summaries of what I teach, not completely replace me, but in some places it’s still pretty extensive.

TechEd N.A. 2014 Session Recordings

There’s some great PowerShell content now online for your viewing pleasure.

Jeffrey Snover and I had a blast doing “Windows PowerShell Unplugged,” and I reviewed some best PowerShell practices (and hopefully provided a little inspiration for your career) in “Windows PowerShell Best Patterns and Practices: Time to Get Serious.” And the #2 overall session of TechEd? “DSC: A Practical Overview,” including a surprise demo (and announcement) from Snover showing DSC running on Linux.


Announcing TechSessions, the Free PowerShell Webinars from

We’re getting set to announce our first four monthly TechSessions, a new series of free webinars from Because we’re starting small, dates and times will be announced only in the TechLetter newsletter, starting with the mid-May issue. So if you want to know about the webinars, sign up for the newsletter!

We’ll initially be able to support 100 attendees in the live event; we’ll evaluate response and adjust as needed after the first few months. However, all webinars will also be recorded, and available to anyone for viewing at any time. Past session recordings will be announced on, and you’ll find a link to those on the Webinar page.

Once we’re ramped up, we’ll announce webinars in the main event schedule, along with the TechLetter. The live event will offer discussion, Q&A, and other benefits, so you’ll want to try and attend live if you can. These will be scheduled for the first or second week of the month in most cases, usually on a Thursday, and usually at 11am US Pacific time. However, specific months may require us to adjust all that to accommodate presenter schedules.

Please contact the Admin at (that’s a valid email) if you’d like to volunteer to present a session in the future! We’ll only be able to keep these going as long as we have presenters, so don’t be shy!

MY 2014 Public POWERCLASS is Now Open for Registration

I’m going to be running a 3-day POWERCLASS April 2, 3, and 4 near Raleigh-Durham, NC! You can get full details on my company’s website, including pricing and class descriptions.

Don’t leave near Raleigh-Durham? Well, it’s a fun place, and not that expensive to visit. More importantly, I’m not going to be doing a huge road-show and visiting a bunch of cities. Right now, my schedule is almost full through September, so this may well be the only public class I do in 2014. It might therefore be worth your while to take a short trip!

The class will be VERY limited in size – just 16 students, max, and I’ll be happy with a bunch fewer. This is a hardcore class. We’re going to assume you’ve conquered the basics of Windows PowerShell and that you’re looking to implement best practices, start using PowerShell for real production tasks, and learn more about PowerShell performance and troubleshooting. It’s a “bring your own laptop” hands-on class, too, so you’ll get tons of hands-on time with an instructor who really cares about what you learn.

This is all-new material, and you won’t find it anyplace else. It’s applicable to v2 through v4, although some things – we WILL be covering DSC, for example – only apply to specific versions (and you’ll learn which is which as we go).

It’s the best PowerShell class I could come up with – I hope you’ll join me.

My outline for accelerated PowerShell training

When I teach PowerShell, either at a private client or in a public class, I tend to use my own outlines. I’m comfortable with them, and they work really well. They formed the basis for the Microsoft 10961 and 55039 courses, although I had to make some changes to accommodate Microsoft standards and varying MCT delivery styles. But I’m often asked if there’s a “MOC-equivalent” outline that combines the entry-level 10961 with the scripting-focused 55039.


First, do understand that I naturally teach at a very concise and accelerated pace. I don’t spend much time on slides; I tend to skip right to demos, and use those to explain what I’m explaining. If you follow a more common delivery style of around 5min per slide, plus taking your time on demos, my approach might not work well for you. I also tend to not tell a lot of ancillary stories, I tend to make students take break during lab time (rather than individually scheduling breaks), and I tend to be as concise as possible in my lectures.

Also, when accelerating these courses together, you don’t do all of the labs. For labs with multiple components (find these 20 command), I’ll do about 1/3 of them. For the 55039 main-sequence labs, I’ll tell students to pick the “A,” “B,” or “C” version rather than doing all three; sometimes I’ll just have them do the “D” version (which gives them a pre-done starting point for each module, rather than making them build on their own work from a previous module).

For Day 1, I’ll cover modules 1-5, and maybe module 6, from 10961. Day 2 will be modules 7, 9, 11, and 12 (covering 6 first, if I didn’t get it done on Day 1). That’s the “core” PowerShell stuff. It’s a fast delivery; it’s possible to spread those out over three days if you prefer, but I explicitly skip modules 6, 8, and 10 at this stage.

When my students all have strong shell or scripting skills, 2 days often gets me through that. If they’re newer, I’ll go slower on modules 1-5, do more of the labs, and take 3 days to cover that 10961 material.

The remainder of the course comes from 55039. That’ll be 2 or 3 days, depending on how long it took you to do the 10961 material. Regardless, I’ll cover modules 2-5. I’ll usually skip module 6, and try to end the day with module 7 on debugging. I’ll cover module 8, 9, and 10. That’s usually 2 days, so it’s the last thing I do if I took 3 days to cover the 10961 stuff.

If I got through 10961 in 2 days, I’ll finish the 55039 material, covering modules 11, 13, and 16. If students insist on workflows, I’ll throw that module in there – I have mixed feelings and results when it comes to workflow, so it’s not part of my standard accelerated delivery. If you have extra time, my priority then goes to modules 15, 13, and 14, in that order. 14 gets you some GUI-building experience, so if the class is pushing for that I’ll include that module instead of workflow.

If all that seems a little informal – well, it is. I’m very good at reading my students, and making sure folks are actually keeping up, so I don’t press too hard. This is a lot of conceptual and practical material to cover in a week.

Price-wise, in the US, I see this kind of accelerated class going for around $3500, although a lot of training centers offer significant discounts. This accelerated outline is absolutely worth it: you’re literally taking someone from zero and teaching them how to build their own script modules and tools in PowerShell. It’s a lot to cover; not every class will be up to it.

The labs in both courses are solid, and I’m especially happy with the ones in 55039 in terms of what they cover, and in how challenging they are. I’ll warn you that the 55039 labs don’t do a lot of hand-holding. Students are expected to learn the material and then execute the labs; the “answer keys” are outright sample solutions, not hints. But if you teach the material as provided, everything students need is in there – if they’re willing to work hard and retain what you’ve shared.

Last chance for feedback on PowerShell course 10961A/B

I’m in the midst of working on 10961C, the Windows Server 2012 R2 / Windows 8.1 / PowerShell 4.0 update of Microsoft’s 10961A/B course, “Automating Administration with Windows PowerShell.” I anticipate this being closed out by the end of November, 2013, so if you’ve taken or taught this course and have any feedback – even a typo – now’s the time to tell me. Drop a comment below, or e-mail me (if you have my address). Please, no Twitter replies on this one.

The course will not be substantially changed from the B rev; because PowerShell v4 doesn’t change much, especially at the entry-level covered by 10961, there wasn’t much to alter. But I’m trying to sweep up as many lingering bugs and typos as possible. Kudos to MCT Jason Yoder for firing over a list of fixes!

Continue reading

PowerShell “Scripting and Toolmaking” Classroom Training Course Now Available to Microsoft Training Centers

Attention Microsoft training centers! Microsoft’s Courseware Marketplace now offers course 55039AC, “Windows PowerShell Scripting and Toolmaking.” Designed as a 5-day course, it’s a spiritual “Part 2″ to Microsoft Official Curriculum course 10961.

With 10961, the goal was to provide a founding in PowerShell basics, in a somewhat product-neutral way. That is, the course doesn’t cover Exchange, or SharePoint, or AD; it focuses on pure PowerShell. Unlike its predecessor, 10325, the 10961 course kind of “stops short” of actual scripting. It shows you how to build a parameterized script, but doesn’t dig into advanced functions, debugging, error handling, and the like. There was a feeling – which has been largely upheld through customer feedback – that a sizable audience needed to get the shell basics under their belt, and weren’t necessarily comfortable leaping into coding. 10325 kind of breezed through scripting at a somewhat high level, and didn’t have time to offer much in the way of practices and other guidance, and it didn’t really set you up for building reusable units of automation.

That’s where 55039AC comes in. It is a scripting class, pure and simple, and it focuses on building reusable units of automation according to best practices and patterns. More time is devoted to design, structure, procedural error handling, and so on. There’s also deeper coverage of module building, including building custom formatting views, and there’s even an introduction to Workflow. Although designed for v3, the course is pretty version-agnostic, meaning it’s suitable for someone who wants to use PowerShell v2, v3, or beyond. And, because it’s a Courseware Marketplace offering, it’s compatible with Software Assurance (SA) training vouchers.

Training centers are welcome to combine 10961 and 55039 to create an “accelerated” class that includes heavier scripting coverage than 10961 alone. I do that myself, actually, although it’s a pretty hardcore week. If you’re interested in doing that, contact me and I can provide some of the accelerated-delivery outlines that I use.

55039’s modules are all standalone – with a twist. Students are encouraged to use and evolve a single code project throughout several modules. However, if you’re not teaching all of the modules, or if a student falls behind, each lab comes with a complete “starting point” that keeps everyone on the same page.

55039 has already been beta-taught, and of course I welcome feedback if you’ve taught the course or taken it as a student.

My company also offers licensing for this course outside the Courseware Marketplace, mainly geared to training centers who want an unlimited perpetual license to reproduce the course materials on their own. We know courseware costs are a significant concern, so we’re trying to offer something reasonable there.

Both 10961 and 55039 (or at least a subset of 55039; we’re still working on exactly what) will be considered pre-requisites for the upcoming 3-day 10962 course, which will focus on advanced PowerShell techniques for us in production environments, including database connectivity, report generation, and so on.

Why the HECK Do You Want to be Taught .NET in a PowerShell Class?!?!?!

Ok, that post title is deliberately provocative. Twitter and all that.

So look, we’re designed this advanced PowerShell class. One of the top five constant suggestions I get whenever I say “advanced” and “PowerShell” is “.NET Framework.”

And I get it. When there’s no cmdlet, .NET has a ton of goodies that can solve a lot of problems. Maybe you don’t like turning to it, but you’ll do it if you have to.

My problem is, what’s that look like in a class?

I mean, for me, using .NET basically works like this:

  1. Spend hours on Google finding the .NET class that will do whatever I need done.
  2. Look up class documentation on MSDN.
  3. Fiddle around in PowerShell with properties and methods until I get what I want.

I can totally see a class making #2 and #3 a little easier. That’s just some basic experience, which is what a class helps build. The problem is, I can teach someone those steps in 30 minutes or less. The hard part is #1, and I truly don’t know any way to “teach” that. You’re either good at Google, or you aren’t. I certainly can’t provide some kind of mega-directory to the whole Framework – that’s what bloody Google or MSDN Search is for.

#3 can also be a hard part, because it requires you to know a bit about the underlying technology. It’s easy to use .NET to resolve DNS names to IP addresses – IF you know how DNS works. If you don’t, .NET is hard to use for that task. I can’t turn a PowerShell class into a “here’s how ____ works, so that I can show you how to do it in .NET.”

So everytime I try to teach .NET in a PowerShell class, I end up showing people how to read the MSDN documentation, execute methods in PowerShell, and look at properties in PowerShell. Kinda boring. I mean, they’re just freakin’ objects, right? Once you’ve grasped “objects,” isn’t .NET easy, assuming you’ve done #1 and found the class you need?

So if you were taking your dream class in “advanced PowerShell,” and you were all excited that it had a module on “Using .NET Framework,” exactly what would that module look like? What would you want to be TAUGHT?

Leave a comment. Tell me.

(By the way, if your answer to the question is, “I want to learn how to find what’s in the .NET Framework,” there’s no need to leave a comment – we all want that, I’ve just no clue how to teach it other than teaching you to be better at Google!)

Questions about an Advanced PowerShell Class Design

As we continue collecting responses to an outline survey about an Advanced PowerShell class, I’ve come up with a couple of questions and would appreciate any feedback you’d care to leave here.

Keep in mind that we’re a bit bound by this course being Microsoft Official Curriculum. I gotta make sure, in other words, that the average MCT can teach it. Ahem. I also have to face facts that people don’t read or obey course pre-requisite suggestions, and that a lot of people taking the course will have zero programming background.


Question 1: GUI

First, we desperately want to include some module on “building friendly GUI tools for techs and end-users.” It’s a massively demanded topic. That said, hand-coding a GUI in either WinForms or WPF is physically painful and time-consuming, and nobody would do it. Asking the class to use SAPIEN PowerShell Studio is probably not on the table; Microsoft has rules, these days, about third-party applications in classes, even if they’re free (which Studio isn’t). Using Visual Studio to generate WPF XAML is probably also out of the question – it adds a lot of build effort for just a single module.

So I’m down to a couple of options. Option A would be to provide students with a basic module that used PowerShell commands to construct a WinForms GUI. They would have after-class access to the module, too. After all, the big thing to teach here is less about how to physically build a GUI (if you were serious about it, you’d get PowerShell Studio), and more about the process of hooking up code to the GUI. By providing a module that shortcuts the hand-coding effort, we’d get to the important bit.

But there’s also a valid perspective that creating little distributable GUI tools is dumb, and that you should be building Web-based ones instead. We could certainly build a module around a simple ASPX page – which is much easier to hand-code with a few examples in front of you – that hosts the PowerShell engine to execute PowerShell commands. They’re centralized, great self-service tools, and easy to crank out once you’ve got a pattern to work from (which we’d provide in the class).



Question 2: Workflow

We’d originally proposed a workflow overview module, with a basic example. Folks have quite rightly commented that workflow isn’t all it was hyped to be. It’s slow, in many cases. It’s hard. It isn’t really PowerShell. There aren’t a ton of killer examples that you can cover in the scope of a class.

But it offers parallelization, which is a great feature. So we’re considering replacing workflow with a module on parallelizing PowerShell. My thought is to do that mainly with jobs. Jobs work very consistently inside the shell, and are easy to use. They have some straightforward caveats, like the fact that they return serialized objects.

There’s an argument to be made for runspace pools, too. But those get very programmer-y. You have to start worrying about concurrency, thread safety, thread and pool management, and a lot more. I’m not sure, in the context of a PowerShell class, we can sufficiently cover all those extras so that someone could be safely effective with runspace pools. I get that they’re more flexible and low-level, but they’re a big topic, and nothing else in the course “leads up” to that level of .NET programming.



Anything Else?

Any other suggestions aside from these two questions would be better served in the original survey. I’m not the only one evaluating those responses, and that survey is the only place we can guarantee the entire team will see everything.