PowerShell使用SwitchParameter自定义Cmdlet
本文关键字:Cmdlet 自定义 SwitchParameter 使用 PowerShell | 更新日期: 2023-09-27 18:11:44
我有以下代码,我尝试使用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
}
}
您可以使用参数集来确保用户只能指定-Text
、-File
或-Dir
与-Argument
中的一个。然后,您应该将开关(和参数)设置为强制性的,而不是可选的。这意味着您的ProcessRecord
方法将知道已经指定了一个开关,并且已经提供了一个参数。因此,您可以删除您的使用输出,它将通过Powershell的内置Get-Help
cmdlet提供。