【问题标题】:PowerShell custom Cmdlet using SwitchParameter使用 SwitchParameter 的 PowerShell 自定义 Cmdlet
【发布时间】:2013-04-26 15:33:06
【问题描述】:

我有以下代码,我尝试使用 C# 为 PowerShell 创建自定义 Cmdlet。我想用我的自定义 cmdlet 做的是,用户应该用两个参数调用它,第一个参数应该是 -Text 或 -File 或 -Dir,下一个应该是一个值,一个指定值的字符串用于文本、文件或目录。只要我能看到它就可以正常工作。但我只是好奇是否有另一种简单的方法或更优雅的方法可以用来实现我想要的。还是我的解决方案是最简单的?对了,SHA256Text、SHA256File、SHA256Directory都是我自己写的自定义函数,不用担心。

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Management.Automation;

namespace PSSL
{
    [Cmdlet(VerbsCommon.Get, "SHA256")]
    public class GetSHA256 : PSCmdlet
    {
        #region Members

        private bool text;
        private bool file;
        private bool directory;
        private string argument;

        #endregion

        #region Parameters

        [Parameter(Mandatory = true, Position = 0, ParameterSetName = "Text")]
        public SwitchParameter Text
        {
            get { return text; }
            set { text = value; }
        }

        [Parameter(Mandatory = true, Position = 0, ParameterSetName = "File")]
        public SwitchParameter File
        {
            get { return file; }
            set { file = value; }
        }

        [Parameter(Mandatory = true, Position = 0, ParameterSetName = "Directory")]
        public SwitchParameter Dir
        {
            get { return directory; }
            set { directory = value; }
        }

        [Parameter(Mandatory = true, Position = 1)]
        [ValidateNotNullOrEmpty]
        public string Argument
        {
            get { return argument; }
            set { argument = value; }
        }

        #endregion

        #region Override Methods

        protected override void ProcessRecord()
        {
            switch(ParameterSetName)
            {
                case "Text":
                    SHA256Text(argument);
                    break;

                case "File":
                    SHA256File(argument);
                    break;

                case "Directory":
                    SHA256Directory(argument);
                    break;

                default:
                    throw new ArgumentException("Error: Bad parameter name.");
            }
        }

        #endregion
    }
}

【问题讨论】:

    标签: c# powershell switch-statement cmdlets


    【解决方案1】:

    您可以使用parameter sets 来确保用户只能指定-Text-File-Dir-Argument 之一。然后,您应该使您的开关(和参数)成为强制性的,而不是可选的。这意味着您的 ProcessRecord 方法将知道已指定开关并已提供参数。因此,您可以删除您的使用输出,这将通过 Powershell 的内置 Get-Help cmdlet 提供。

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多