MS-55039 - Windows PowerShell Scripting and Toolmaking

This five-day instructor-led course is intended for IT Professionals who have a working knowledge of Windows PowerShell 3.0 techniques and technologies, and who want to build reusable tools by using Windows PowerShell 3.0. Students of this course may administer a wide variety of server and client products and technologies that offer Windows PowerShell integration, including Microsoft Exchange Server, Microsoft Windows Active Directory Domain Services, Microsoft SharePoint Server, and more. This course focuses on the Windows PowerShell scripting language, and on the concepts and techniques needed to produce reusable, professional tools.

Student Testimonials

Instructor did a great job, from experience this subject can be a bit dry to teach but he was able to keep it very engaging and made it much easier to focus. Student
Excellent presentation skills, subject matter knowledge, and command of the environment. Student
Instructor was outstanding. Knowledgeable, presented well, and class timing was perfect. Student

Click here to print this page »


  • Experience at basic Windows administration
  • Experience using Windows PowerShell to query and modify system information
  • Experience using Windows PowerShell to discover commands and their usage
  • Experience using WMI and/or CIM to query system information

Detailed Class Syllabus

Module 1: Tool Design

Tools do one thing
Tools are flexible
Tools look native

Module 2: Start with a Command

Why start with a command?
Discovery and experimentation

Module 3: Build a Basic Function and Module

Start with a basic function
Create a script module
Check prerequisites
Run the new command

Module 4: Adding CmdletBinding and Parameterizing

About CmdletBinding and common parameters
Accepting pipeline input
Parameter validation
Parmeter aliases

Module 5: Emitting Objects as Output

Assembling information
Constructing and emitting output
Quick tests

Module 6: An Interlude: Changing Your Approach

Examining a script
Critiquing a script
Revising the script

Module 7: Using Verbose, Warning, and Informational Output

Knowing the six channels
Adding verbose and warning output
Doing more with verbose output
Informational output

Module 8: Comment-Based Help

Where to put your help
Getting started
Going further with comment-based help
Broken help

Module 9: Handling Errors

Understanding errors and exceptions
Bad handling
Two reasons for exception handling
Handling exceptions in our tool
Capturing the actual exception
Handling exceptions for non-commands
Going further with exception handling
Deprecated exception handling

Module 10: Basic Debugging

Two kinds of bugs
The ultimate goal of debugging
Developing assumptions
The PowerShell ISE

Module 11: Going Deeper with Parameters

Parameter positions
Multiple parameter sets
Value from remaining arguments
Help messages
More CmdletBinding

Module 12: Writing Full Help

External help
Using PlatyPs
Supporting online help
“About” topics
Making your help updatable

Module 13: Unit Testing Your Code

Sketching out the test
Making something to test
Expanding the test
Going further with Pester

Module 14: Extending Output Types

Understanding types
The Extensible Type System
Extending an object
Using Update-TypeData

Module 15: Analyzing Your Script

Performing a basic analysis
Analyzing the analysis

Module 16: Publishing Your Tools

Begin with a manifest
Publishing to PowerShell Gallery
Publishing to private repositories

Module 17: Basic Controllers: Automation Scripts and Menus

Building a menu
Using UIChoice
Writing a process controller

Module 18: Proxy Functions

A proxy example
Creating the proxy base
Modifying the proxy
Adding or removing parameters

Module 19: Working with XML Data

Simple: CliXML
Importing native XML
Creating native XML from scratch

Module 20: Working with JSON Data

Converting to JSON
Converting from JSON

Module 21: Working with SQL Server Data

SQL Server terminology and facts
Connecting to the server and database
Writing a query
Running a query
Thinking about tool design patterns

Module 22: Final Exam

Lab problem
Break down the problem
Do the design
Test the commands
Code the tool