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 »