Advanced Functions
- CmdletBinding, parameter attributes, parameter sets and input validation
- Processing pipeline input with begin, process and end, accepting multiple objects
- Structured output with custom objects and output types
- Supporting -WhatIf and -Confirm (SupportsShouldProcess), comment-based help
Developing and Distributing Modules
- Building script modules with a module manifest, separating public and internal functions
- Checking code with PSScriptAnalyzer and testing it with Pester
- Publishing modules to the PowerShell Gallery or an internal repository with Microsoft.PowerShell.PSResourceGet
- Versioning and source control with Git
Robust Scripts
- Terminating and non-terminating errors, try, catch and finally, evaluating error records with Get-Error
- Debugging in Visual Studio Code: breakpoints, watching variables, the call stack
- Logging and transcripts
- Keeping secrets out of code: SecretManagement with a local vault or Azure Key Vault
Working with Data and Interfaces
- Reading, modifying and writing JSON, CSV and XML
- Calling REST APIs with Invoke-RestMethod: authentication, paging, error handling
- Using .NET classes directly, defining your own PowerShell classes and enumerations
Scaling and Automating
- Parallel processing with ForEach-Object -Parallel and thread jobs, limits and shared variables
- Remoting for many systems over WinRM and SSH, delegated administration with Just Enough Administration (JEA)
- Controller scripts: combining your own tools, generating reports and running them on a schedule