C# 使用SwitchParameter的PowerShell自定义Cmdlet

C# 使用SwitchParameter的PowerShell自定义Cmdlet,c#,powershell,switch-statement,cmdlets,C#,Powershell,Switch Statement,Cmdlets,我有以下代码,其中我尝试使用C#为PowerShell创建自定义Cmdlet。我想用我的定制cmdlet做的是,用户应该用两个参数调用它,第一个参数应该是-Text或-File或-Dir,下一个参数应该是一个值,一个指定Text、File或directory值的字符串。只要我看得见,它就行。但我只是好奇,是否有另一种简单的方法或更优雅的方法,我可以用来实现我想要的。或者我的解决方案是最简单的吗?顺便说一下,SHA256Text、SHA256File和SHA256Directory都是我编写的自定

我有以下代码,其中我尝试使用C#为PowerShell创建自定义Cmdlet。我想用我的定制cmdlet做的是,用户应该用两个参数调用它,第一个参数应该是-Text或-File或-Dir,下一个参数应该是一个值,一个指定Text、File或directory值的字符串。只要我看得见,它就行。但我只是好奇,是否有另一种简单的方法或更优雅的方法,我可以用来实现我想要的。或者我的解决方案是最简单的吗?顺便说一下,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
    }
}
您可以使用以确保用户只能指定
-Text
-File
-Dir
中的一个,并结合
-Argument
。然后,您应该将开关(和参数)设置为强制的,而不是可选的。这意味着您的
ProcessRecord
方法将知道已经指定了一个开关,并且已经提供了一个参数。因此,您可以删除使用情况输出,该输出将通过Powershell内置的
Get-Help
cmdlet提供