Yes, there is a way to do this without inheriting from a common base class for parameters. This is not well documented, only hinted at in the note of the IDynamicParameters.GetDynamicParameters method. Here is a more detailed discussion of the topic.
First create a class with your common parameters declared as properties with [Parameter] attributes:
internal class MyCommonParmeters { [Parameter] public string Foo { get; set; } [Parameter] public int Bar { get; set; } ... }
Then, each Cmdlet that wants to use these common parameters must implement the IDynamicParameters interface in order to return a member instance of the MyCommonParameters class:
[Cmdlet(VerbsCommon.Add, "Froz")] public class AddFroz : PSCmdlet, IDynamicParameters { private MyCommonParmeters MyCommonParameters = new MyCommonParmeters(); object IDynamicParameters.GetDynamicParameters() { return this.MyCommonParameters; } ...
With this approach, the PowerShell parameter binder parameter will find and populate the parameters in the MyCommonParameters instance just as if they were members of the Cmdlet classes.
Burt_harris
source share