Добавление наборов параметров в мой пользовательский командлет C # без обязательных параметров - PullRequest
1 голос
/ 04 февраля 2012

Я разработал собственный командлет c #.Он имеет три параметра (все они являются строками), и ни один из них не является обязательным.Два из них относятся к параметру set1, а третий - к параметру set2.Это работает нормально, когда пользователь задает параметры из обоих наборов параметров, а затем выдает сообщение, что они не принадлежат одному и тому же набору параметров.Но у меня возникают две проблемы:

  1. Когда пользователь не дает никаких параметров (поскольку ни один из них не является обязательным), он выдает ошибку. Набор параметров не может быть решен с использованием указанного именованного параметра
  2. Когда пользователь задает первый параметр и тип, а затем при нажатии на вкладку должен отображаться только второй параметр, поскольку первый и второй находятся в одном наборе параметров, но отображают 2-й и 3-й, что является неправильным.Точно так же он показывает 1-й и 2-й, даже если пользователь сначала вводит 3-й параметр.

Вот код, как я определил параметры:

    [System.Management.Automation.Cmdlet(System.Management.Automation.VerbsCommon.Get, "Customcmd")]
    public class Get_Customcmd: System.Management.Automation.PSCmdlet
    {
        [System.Management.Automation.Parameter(Mandatory = false, ParameterSetName = "Set1")]
        public string Param1;
        [System.Management.Automation.Parameter(Mandatory = false, ParameterSetName = "Set1")]
        public string Param2;
        [System.Management.Automation.Parameter(Mandatory = false, ParameterSetName = "Set2")]
        public string Param2;
        protected override void ProcessRecord()
        {

Может кто-нибудь сказать мне, я пропустилчто-нибудь?Нужно ли больше добавить атрибуты к параметрам?

1 Ответ

1 голос
/ 22 июня 2012
  1. Поскольку вы используете только именованные параметры, вам нужно либо пометить один из них как DefaultParameterSet, например

    [Cmdlet(VerbsCommon.New, "Customcmd", DefaultParameterSetName = Set1)]

    , либо иметь хотя бы один параметр, который не является частью какого-либо именованного ParameterSet.

  2. PS не проверяет, относятся ли предложения вкладок к одному и тому же набору параметров или нет. Таким образом, вы не делаете ничего плохого здесь, так ведет себя PS.

...