Audience
This course is intended for administrators in a Microsoft-centric environment who want to build reusable units of automation, automate business processes, and enable less-technical colleagues to accomplish administrative tasks.
Prerequisites
Before attending this course, students must have:
- 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
Duration
5 days. Hands on.
Course Objectives
This course is intended for IT professionals who are interested in furthering their skills in Windows PowerShell and administrative automation. The course assumes a basic working knowledge of PowerShell as an interactive command-line shell, and teaches students the correct patterns and practices for building reusable, tightly scoped units of automation.
After completing this course, students will be able to:
- Describe the correct patterns for building modularized tools in Windows PowerShell
- Build highly modularized functions that comply with native PowerShell patterns
- Build controller scripts that expose user interfaces and automate business processes
- Manage data in a variety of formats
- Write automated tests for tools
- Debug tools
Course Content
Module 1: Tool Design
Tools do one thing
Tools are flexible
Tools look native
Lab : Designing a Tool: Design a tool
After completing this module, students will be able to:
• Describe the native shell patterns that a good tool design should exhibit
Module 2: Start with a Command
Why start with a command?
Discovery and experimentation
Lab : Designing a Tool: Start with a command
After completing this module, students will be able to:
• Describe the benefits of discovery and experimentation in the console
• Discover and experiment with existing commands in the console
Module 3: Build a Basic Function and Module
Start with a basic function
Create a script module
Check prerequisites
Run the new command
Lab : Designing a Tool: Build a basic function and module
After completing this module, students will be able to:
• Build a basic function
• Create a script module
• Run a command from a script module
Module 4: Adding CmdletBinding and Parameterizing
About CmdletBinding and common parameters
Accepting pipeline input
Mandatory-ness
Parameter validation
Parmeter aliases
Lab : Designing a Tool: Adding CmdletBinding and Parameterizing
After completing this module, students will be able to:
• Describe the purpose of CmdletBinding and list common parameters
• Parameterize a script’s input
• Define parameters as mandatory
• Define parameters as accepting pipeline input
• Define parameter validation
Module 5: Emitting Objects as Output
Assembling information
Constructing and emitting output
Quick tests
Lab : Designing a Tool: Emitting objects as output
After completing this module, students will be able to:
• Describe the purpose of object-based output
• Create and output custom objects from a function
Module 6: An Interlude: Changing Your Approach
Lessons
Examining a script
Critiquing a script
Revising the script
After completing this module, students will be able to:
• Describe the native patterns that a good tool design should exhibit
• Redesign a script to meet business requirements and conform to native patterns
Module 7: Using Verbose, Warning, and Informational Output
Lessons
Knowing the six channels
Adding verbose and warning output
Doing more with verbose output
Informational output
Lab : Designing a Tool: Using Verbose, Warning, and Informational Output
After completing this module, students will be able to:
• Describe the six output channels in the shell
• Write commands that use verbose, warning, and informational output
• Run commands with extra output enabled
Module 8: Comment-Based Help
Where to put your help
Getting started
Going further with comment-based help
Broken help
Lab : Designing a Tool: Comment-based help
After completing this module, students will be able to:
• Describe the purpose and construction of comment-based help
• Add comment-based help to a function
• Identify causes of broken comment-based 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
Lab : Designing a Tool: Handling errors
After completing this module, students will be able to:
• Describe the native patterns for handling errors in a command
• Add error handling to a command
• Run a command and observe error handling behaviors
Module 10: Basic Debugging
Two kinds of bugs
The ultimate goal of debugging
Developing assumptions
Write-Debug
Set-PSBreakpoint
The PowerShell ISE
Lab : Designing a Tool: Basic debugging
After completing this module, students will be able to:
• Describe the tools used for debugging in PowerShell
• Debug a broken script
Module 11: Going Deeper with Parameters
Parameter positions
Validation
Multiple parameter sets
Value from remaining arguments
Help messages
Aliases
More CmdletBinding
After completing this module, students will be able to:
• Describe the use of positional parameters
• Describe additional parameter validation methods
• Describe how to define multiple parameter sets
• Describe other parameter definition options
Module 12: Writing Full Help
External help
Using PlatyPs
Supporting online help
“About” topics
Making your help updatable
Lab : Designing a Tool: Writing full help
After completing this module, students will be able to:
• Describe the advantages of external help
• Create external help using PlatyPS and Markdown
Module 13: Unit Testing Your Code
Sketching out the test
Making something to test
Expanding the test
Going further with Pester
Lab : Designing a Tool: Unit testing your code
After completing this module, students will be able to:
• Describe the purpose of unit testing
• Write basic unit tests for PowerShell functions
Module 14: Extending Output Types
Understanding types
The Extensible Type System
Extending an object
Using Update-TypeData
After completing this module, students will be able to:
• Describe the purpose of the ETS
• Extend an existing object type
Module 15: Analyzing Your Script
Performing a basic analysis
Analyzing the analysis
Lab : Designing a Tool: Analyzing your script
After completing this module, students will be able to:
• Describe the use of Script Analyzer
• Perform a basic script analysis
Module 16: Publishing Your Tools
Begin with a manifest
Publishing to PowerShell Gallery
Publishing to private repositories
Lab : Designing a Tool: Publishing your tools
After completing this module, students will be able to:
• Describe the tool publishing process and requirements
• Publish a tool to a repository
Module 17: Basic Controllers: Automation Scripts and Menus
Building a menu
Using UIChoice
Writing a process controller
Lab : Designing a Tool: Basic controllers
After completing this module, students will be able to:
• Describe the purpose of basic controller scripts
• Write a simple controller script
Module 18: Proxy Functions
A proxy example
Creating the proxy base
Modifying the proxy
Adding or removing parameters
Lab : Designing a Tool: Proxy functions
After completing this module, students will be able to:
• Describe the purpose of proxy functions
• Create a simple proxy function
Module 19: Working with XML Data
Simple: CliXML
Importing native XML
ConvertTo-XML
Creating native XML from scratch
Lab : Designing a Tool: Working with XML
After completing this module, students will be able to:
• Describe the use of XML within PowerShell
• Use XML data within a PowerShell function
Module 20: Working with JSON Data
Converting to JSON
Converting from JSON
Lab : Designing a Tool: Working with JSON data
After completing this module, students will be able to:
• Describe the use of JSON data within PowerShell
• Use JSON data within a PowerShell function
Module 21: Working with SQL Server Data
SQL Server terminology and facts
Connecting to the server and database
Writing a query
Running a query
Invoke-SqlCmd
Thinking about tool design patterns
After completing this module, students will be able to:
• Describe the use of SQL Server from within PowerShell
• Write and run SQL Server queries
• Design tools that use SQL Server for data storage
Module 22: Final Exam
This module provides a chance for students to use everything they have learned in this course within a practical example.
Lab problem
Break down the problem
Do the design
Test the commands
Code the tool
Lab : Final Exam: Lab one
Lab : Final Exam: Lab two
After completing this module, students will be able to:
• Create PowerShell tools, using native design patterns, from business requirements.