Material accompanying PowerShell + DevOps Summit session
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Writing PowerShell Modules


An important note: The content of this session made implicit assumptions, for better or worse. For example, It should be available on the PowerShell Gallery (or an internal repository) requires that you use a proper module manifest


These references were directly mentioned or used in coming up with the Writing PowerShell Modules: Tips, Tools, and Best Practices session at the 2017 PowerShell + DevOps Global Summit, or just related to the topic : )

Interesting Community Module Designs

And many more. Poke around other community modules to see what folks are doing!

Module Building Tools

Tools and References

Getting and publishing modules:

Package repositories:

Source control and related tooling:

  • GitHub - Recommended for public projects. Many folks have auth, many tools integrate, PowerShell team uses it
  • GitLab - Community edition is fantastic, enables CI
  • VSTS - If you already paid for it. Personally not a fan of build systems that aren't defined in code

Example tools that integrate with GitHub:

Avoid fun with maml, xml:

  • Platyps - Generate documentation from markdown, and vice versa
  • EZOut - Simplify writing format files. Alternatively, just poke around other folks' psm1xml

Mentioned during tips on functions, and making it feel PowerShell-y:

Discussions on module design:

Linting and testing:

CI/CD - Run your tests, among other things:

  • AppVeyor - Free, perfect for public PowerShell modules
  • GitLab CE CI
  • Jenkins
  • VSTS - If you already paid for it. Maybe. Personally not a fan of build systems that aren't defined in code
  • Invoke-BuildUsed in an example of non-PowerShelly authoring. Awesome for users, harder for contributors
  • Psake - Not as much functionality as Invoke-Build, and was dead, but this might change...

On module and function design, among other things: