Как предоставить значение по умолчанию для SwitchParameter для командлетов C # - PullRequest
0 голосов
/ 18 октября 2019

Ниже приведен командлет, и мне нужно, чтобы он работал, предоставив переключатель «Удалить» или «установить». По умолчанию «установка» присутствует.

    [Cmdlet(VerbsLifecycle.Install, "MyPackage")]
    [UsedImplicitly]
    public class InstallMyPackageCommand : PSCmdlet
    {            
        [UsedImplicitly]
        [Parameter(Position = 0, Mandatory = false, ParameterSetName = "Uninstall")]
        public SwitchParameter Uninstall { get; set; } = !SwitchParameter.Present;

        [UsedImplicitly]
        [ValidateNotNullOrEmpty]
        [ValidateNotNull]
        [Parameter(Position = 1, Mandatory = true)]
        public string Path { get; set; }

        protected override void BeginProcessing()
        {
            base.BeginProcessing();
        }
    }

Но приведенный выше код не распознает не предоставленный переключатель как «Uninstall» и пытается связать путь к файлу с первым параметром переключателя, который полностью не является путем к файлу. Даже первый параметр не является обязательным и присутствует значение по умолчанию.

После ошибки, получаемой при вводе команды "Install-MyPackage "C:\Projects\MsiPackages"

 Cannot convert 'System.String' to the type 'System.Management.Automation.SwitchParameter'

, требуемой для параметра «Удалить».

Может ли любое тело сообщить мне, что это решение.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Хотя ваш собственный ответ технически действительно отвечает на ваш вопрос, касающийся того, как установить значение по умолчанию для параметра переключателя. Использовать его так, как вы описываете, не рекомендуется по нескольким причинам.

Функции с глаголами, такими как Install, должны быть в паре с ассоциированной противоположностью (где это имеет смысл). Пользователи ожидают запустить Install-MyPackage <blah> с последующим Uninstall-MyPackage <blah> вместо Install-MyPackage <blah> -Uninstall. Для справки, вот список Одобренных глаголов для Powershell .

Обычно параметры переключателя по умолчанию выключены, а включены только при включении. Хотя можно указать параметр-переключатель с явным значением, например -MySwitch:$false, большой процент пользователей этого не знает. Это также невозможно обнаружить без просмотра полного вывода Get-Help для функции.

Короче, пожалуйста, не делайте этого. Ваши пользователи будут вам благодарны.

0 голосов
/ 18 октября 2019

Я думаю, что можно использовать значение по умолчанию для SwitchParameter как:

  public SwitchParameter Install { get; set; } = SwitchParameter.Present;
...