PowerShell defines a number of different types of command. Functions are written in PowerShell (normally), and Cmdlets are written in a compiled language (C# more often than not).

Classes, introduced with PowerShell 5, offer the possibility of creating a Cmdlet in PowerShell. The problem is, defining a class or adding a type is not enough to “register” a Cmdlet. Import-Module handles this step for compiled modules, but not script modules.
More »

A while ago I decided to split a number of my modules up as they were becoming messy. Instead of standalone modules I now have modular modules.

The split introduced something of a version management problem for me, so I made up a set of module management functions and scripts to see me through from development to release and maintenance of released modules.

This article explores the module tree and looks at the installation and update functionality.
More »

Compare-Object and Group-Object are very powerful tools for comparing and manipulating arrays of objects.

Compare-Array is intended to be used against arrays containing primitive data types where Type comparison is imperative. In addition to the Type constraint, the ordering of an array is treated as a distinguishing factor.
More »

Get-InstalledSoftware reads uninstall registry keys from a host, it will also read Uninstall keys from loaded user hives (HKEY_USERS).

Get-InstalledSofware does not load hives, a user must have been logged on (at some point) for the hive to be loaded. Rebooting a machine unloads all user hives.
More »