Is this list "Everything" in PowerShell?

Soooo.... it's time for me to start looking at updating my various training materials (books, videos, courses, whatnot) for v4.

I'm going to, with at least some of these, take an all-versions approach. I'll teach what's in v2, then cover what v3 added, then cover v4, etc. It'll be easier to maintain over the upcoming years.

For right now, I'm trying to assemble an organized topic list of "everything" the shell does. Now, I need to wrap that in an important caveat: I'm aiming at admins. Not developers. I'm not saying devs aren't a great audience, but for this project I need to constrain my scope to just the admin audience. I'm also focused mainly on what the shell does natively, with only a few diversions into external or underlying technologies. Those are fixed caveats for this project - no exceptions.

Right now I"m kind of chunking the list into what I feel can be taught (by me) in 20-30 minutes, or a book chapter, or something like that. This isn't necessarily how the material will be presented - this is just me organizing my thoughts so as to not miss important stuff.

So, given the list below, what do you feel is missing?

(Numbers are major topics; letters are basically my mental notes about what the topic might include that I might otherwise forget; like I said, this isn't meant to be a real book outline - it's just a topic list)

PowerShell Core
1. Series Introduction and Lab Setup
2. Windows PowerShell Introduction and Requirements
3. Finding and Discovering Commands
a. Importing modules and snapins
4. Interpreting Command Help
5. Running Commands
6. Running External Commands: Tips and Tricks
a. $Lastexitcode
7. Working with PSProviders and PSDrives
8. Variables, Strings, Hashtables, and Core Operators
a. Double quote tricks, subexpressions
b. Here-strings
c. Escapes
d. Variable types
e. Arrays
f. Math operators
9. Regular Expression Basics
a. Basic regex language
b. –Match
c. Select-String
10. Learning the Pipeline: Exporting and Converting Data
11. Understanding Objects in PowerShell
12. Core Commands: Selecting, Sorting, Meauring, and More
13. How the PowerShell Pipeline Works
14. Formatting Command Output
15. Comparison Operators and Filtering
16. Advanced Operators
17. Setting Default Values for Command Parameters
18. Enumerating Objects in the Pipeline
a. Working with object methods
19. Advanced Date and String Manipulation
20. Soup to Nuts: Completing a New Task

PowerShell Remoting
21. PowerShell Remoting Basics
22. Persistent Remoting: PSSessions
23. Implicit Remoting: Using Commands on Another Computer
24. Advanced Remoting: Passing Data and Working with Output
25. Advanced Remoting: Crossing Domain Boundaries
26. Advanced Remoting: Custom Session Configurations
27. Web Remoting: PowerShell Web Access

28. WMI and CIM: WMI, Docs, and the Repository
29. WMI and CIM: Using WMI to Commands Query Data
30. WMI and CIM: Using CIM Commands to Query Data
31. WMI and CIM: Filtering and WMI Query Language
32. WMI and CIM: Associations
33. WMI and CIM: Working with CIM Sessions
34. WMI and CIM: Executing Instance Methods

35. Background Job Basics: Local, WMI, and Remoting Jobs
36. Scheduled Background Jobs

Scripting in PowerShell
37. PowerShell Script Security
38. Prompting for Input, Producing Output
39. Creating Basic Parameterized Scripts
40. PowerShell Scripting: Logical Constructs
41. PowerShell Scripting: Looping Constructs
a. Break and Continue
42. PowerShell Scripting: Basic Functions, Filters, and Pipeline Functions
43. PowerShell Scripting: Best Practices
a. Line breaking
b. Splatting
c. Formatting
d. Source Control
e. Etc.
44. PowerShell Scripting: From Command to Script to Function to Module
45. PowerShell Scripting: Scope
46. PowerShell Scripting: Combining Data from Multiple Sources
a. Ordered hashtables

Advanced Functions (“Script Cmdlets”)
47. Advanced Functions: Adding Help
48. Advanced Functions: Parameter Attributes
49. Advanced Functions: Pipeline Input
50. Advanced Functions: Parameter Sets

Advanced Scripting Techniques
51. Creating Private Utility Functions and Preference Variables
52. Adding Error Capturing and Handling to a Function
53. Advanced Error Handling
a. Variety of error capturing options
b. Catching multiple exceptions
c. Etc.
54. Error Handling the Old Way: Trap
55. Debugging Techniques
56. Creating Custom Formatting Views
57. Creating Custom Type Extensions
58. Working with SQL Server (and other) Databases
59. Working with XML Data Files
60. Supporting –WhatIf and –Confirm in Functions
61. Troubleshooting and Tracing the Pipeline
62. Using Object Hierarchies for Complex Output
63. Creating a Proxy Function

PowerShell in the Field
64. From the Field: Enhanced HTML Reporting
65. From the Field: Trend Analysis Reporting
66. From the Field: Scraping HTML Pages

PowerShell Workflow
67. Introduction to PowerShell Workflow

Desired State Configuration
68. Desired State Configuration: The Basics
69. Desired State Configuration: Configuration Scripts
70. Desired State Configuration: Writing Resources
71. Globalizing a Function or Script
72. Discovering and Using COM Objects
73. Discovering and Using .NET Classes and Instances

Writing Scripts for Other People
74. Controller Scripts: Automating Business Processes
75. Controller Scripts: A Menu of Tools
76. Creating a GUI Tool: The GUI
77. Creating a GUI Tool: The Code
78. Creating a GUI Tool: The Output
79. Creating a GUI Tool: Using Data Tables

Advanced Core Techniques, Tricks, and Tips
80. Using Type Accelerators
a. [ADSI]
b. [XML]
c. [VOID]
d. where they’re documented
81. The Big Gotchas in PowerShell
a. (from the ebook list)
82. Fun with Profiles
a. Profiles and hosts
b. Prompt
c. Colors
d. Get a credential
83. Random Tips and Tricks
a. Redirection changing pipelines
b. $$
c. $?
d. Dot sourcing

Posted in:
About the Author

Don Jones

Profile photo of Don Jones

Don Jones is a Windows PowerShell MVP, author of several Windows PowerShell books (and other IT books), Co-founder and President/CEO of, PowerShell columnist for Microsoft TechNet Magazine, PowerShell educator, and designer/author of several Windows PowerShell courses (including Microsoft's). Power to the shell!


  1. PowerShell on Linux exists to help Windows admins to help them transition away from Windows Server. But In a decade, when > 75% of workloads running on Azure are Linux, the tools used to manage those workloads will be designed for and meet the needs of the Linux administrator mindset. Linux administrators have a great set of mature tools and it isn't entirely clear why they'd want to transition to using PowerShell. Linux has won. The growth of Linux on Azure shows that. It's time for Azure to be a Linux First environment - and PowerShell on Linux doesn't really fit because it's primarily trying to graft a new and unproven Microsoft way of doing things onto successful practices and culture. Sure they can do it - but they'd be better off retraining everyone to "Think Linux".

    If Microsoft has (apparently) given up on Windows Server and understand that only a few legacy holdouts will want to run it in Azure in 10 years time (with the majority of workloads being Linux), they are wasting resources trying to reinvent how Linux administrators do things as a way of placating legacy Windows administrators. Legacy Windows administrators should bite the bullet and go "all-in" and adopt existing successful open source administration paradigms. The clock is ticking on their relevance and if they spend precious time investing in a nascent administration technology instead of fully transitioning to an open source mindset, they'll be less employable in future.

    PowerShell on Linux would be a neat idea if Windows Server had a future. It'll remain around in the same way that mainframes are still with us - but Microsoft has no interest in making a compelling case for organizations to choose their product over the free alternative. The future of Windows Server is the current reality of Windows Phone.

    • Thank you SO much for contributing your perspective! I do think - and I'm not a Microsoft fanboy per se - that you're misinformed, or at least under-informed. Time will tell, of course, but I suspect you've brought some personal bias to your viewpoint.

    • Interesting perspective. But I think you missed the point why Microsoft is actually open sourcing PowerShell. If you followed the talks that Jeffrey Snover did the last few years, it became clear that they want to be able to support heterogeneous environments. And for what I've seen now from Microsoft, and especially the PowerShell team, is that they don't have a hidden agenda. Microsoft is not the Microsoft anymore from let's say, 5-10 years ago.

      I agree with you, that there's a lot of Linux on Azure. But many, many companies I come are mainly Windows based infrastructures. Also guys that I know that work for other companies almost only see Windows based infra's.

      Yes, Linux has it's place in this world, but according for Microsoft there's no battle between Windows or Linux. They're citizens in IT which Microsoft wants to support best. And PowerShell is not a tool per se, it's meant to be a management framework. A framework that operates with built-in tools or in the case of Windows, the .NET framework.

      Windows Server has a big future, just look at the developments Microsoft is doing on Nano server.

    • Do you really think in 20 years well be dealing with "OS war" ?

      Do you think well see linux or windows in 20-30 years ? I dont.

      Do you think there is a loosing side or a winning side ? There are never winners in any war.

      From my POV, the shift towards lean kernels to accommodate the cloud, will get us eventually to a unified kernel of some sort getting the best of breed of all OSes, giving developers and IT the option to focus on the tools and the frameworks and less about the underlying layers.

      Running a business that creates OS is becoming very expensive. No one wants to be limited in the tools they want to use, thus the SQL on Linux is a huge huge thing in that sense and it will only get bigger with more such products going the same way. I have yet to see any major party offer anything similar things, coming from the Linux side because it takes money and effort very little companies have, so MS in that sense is helping transform the ecosystem again and its in a very good direction.

      Powershell on Linux exists so I, as a windows admin will have a lower barrier of entrance, if my boss decides one day to invest some our company assets on linux. If I can help my company get the right decisions that will save it money and achieve more and if that means going with a non MS way, guess what, I can still use my skills from the windows side without the hassle of the learning curve.

      For a long time I've been an advocate of learning both windows and Linux, no matter what I do mostly in my work time, as they are just tools to make the job, means to achieve a goal..they are not the goals themselves, and the movement to the cloud just emphasize it even more.

      I think your notion of what open source and free means is what's leading you in the line of thought and that's where I think you were wrong, imho.
      Not saying that my notion of what open source and free means is better, but its somewhat less biased. Nothing is free. Open source doesn't mean security (look at the horrible OpenSSL hole that's been there for two years and only recently been closed, or support-when-you-NEED it, that will always cost money, either by support contracts or having devs that know that specific language to deal with the bugs internaly (which by itself is even more limiting with the amount of languages and frameworks popping every second day).

      As for hidden agendas, you need to remember this is still a business. There's always money involved and business opportunities to be made. MS along they years was always good in creating those opportunities for itself and its partners and it continues to do so, the bottom line will be the tools. If you have ones that do the job for you, keep using them. If MS puts money and effort to create better tools with the community, who's the winner ? Everyone.

      I've seen this in the heated arguments on the PS repo the second it went public. The lack of broader vision some of the Linux base audience showed, the arrogance, the "Its mine, dont touch it" is somewhat alarming. I'm just happy to know that the sysadmins in 20 years, the ones born today well have a different starting point where they will choose the tools and be told what to use by old retiring sysadmins that are trying to hold to their precious seats instead of embracing change and supporting it in the evolving it world.

  2. If I have to copy files from installation folder to destination and I have to do exception handling because everything is automated, then how to do that? What all errors may arise and how to recognize and handle them? Please help.

  3. powershell ought to get the credit it deserves for enabling a developer to rapidly create rich output handling complex decisions based upon datasets gathered from various means and implementing a nearly infinite number of actions based on these. Simply put, it can be, and it is, much more than an admin tool, in the right hands.

  4. To start this is a thing of beauty in it's simplicity.
    Does anyone have experience with how much memory the results occupy and doing Get-job | Receive-Job at the end? If I run say a 1000 or 10,000 will this cause memory problems? I am thinking doing Get-Job -State Complete | Receive-Job & then |remove-job inside the loop (and logging it) would reduce the chance of running the host out of memory, or am I just over complicating it?

  5. a) Remoting
    The primary purpose of PS on *nix will be remoting to Win-Hosts, such as Bash on Windows vice versa.

    Due to the nature of *nix as document driven OS, an object based shell does not make that much sense. We're missing the API level. Jeffrey told us so, long ago.

    b) Religious affairs
    It's not about publishing the code (which is nevertheless great!).
    The GPL especially is the denial of the biz model that drives the revenue of Microsoft. So, indeed, haters will hate. Agree.

    But, in for a penny, in for a pound, PoSh is part of Windows which is an expensive, closed down product, increasingly incapacitating the user.

    c) The role of Community
    Sorry to say that, but the PS community is so much more than the few "Get-Expert -wellknown | Get-Random" MVPs. I know it's hard to see that inside the bubble.

    PoSh itself is gorgeous but - at the end - just a shell, such as Korn, C, Z and all the others.

    Far more important: the promise of a datacenter abstraction layer beyond the borders of specific vendors, automation and the refusal of a click UI.

    In this sense, publishing the underlying code is a statement which can't be exaggerated!

    Great Post, Don!

  6. Thanks, Don. This article saved me tons of frustration. I was writing a fairly simple script that would iterate through a list of servers and grab some WMI information. However, using Get-Content, I found that once the file went beyond some threshold, my script would no longer work properly. Implementing your method fixed my problem, and the script works perfectly.

Leave a Reply

Your email address will not be published. Required fields are marked *