A cmdlet must derive from either
System.Management.Automation.Cmdlet orSystem.Management.Automation.PSCmdlet.Every cmdlet class you implement must be public.
CmdletDoes not depend on the PowerShell runtime. It can be called directly from any .NET language.
PSCmdletdepends on the PowerShell runtime. It executes within a runspace.
The base class wires the type into PowerShell's command model. A non-public class is invisible to the runtime.