1

C# を使用して PowerShell 用のカスタム コマンドレットを作成しようとする次のコードがあります。カスタム コマンドレットでやりたいことは、ユーザーが 2 つのパラメーターを使用して呼び出す必要があることです。最初のパラメーターは -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
    }
}
4

1 に答える 1

3

パラメーター セットを使用して、ユーザーが-Text-File、または-Dirと組み合わせて1 つだけを指定できるようにすることができます-Argument。次に、スイッチ (および引数) をオプションではなく必須にする必要があります。これはProcessRecord、スイッチが指定され、引数が提供されたことをメソッドが認識していることを意味します。したがって、使用状況の出力を削除できます。これは、Powershell の組み込みGet-Helpコマンドレットを介して利用できます。

于 2013-05-02T13:04:20.047 に答える