У меня есть следующий код, в котором я пытаюсь создать собственный командлет для PowerShell с помощью C #.
Что я хочу сделать с моим настраиваемым командлетом, так это то, что пользователь должен вызвать его с двумя параметрами, из которых первый должен быть -Text или -File или -Dir, а следующий должен быть значением, строкой, которая определяет значение для текста, файла или каталога.
Дело в том, что если я попытаюсь вызвать свой командлет, например, с параметром -Test, который, конечно, является неправильным параметром, я не получу значение оператора по умолчанию, в котором говорится: «Неверное имя параметра» < / сильный>.
Думаю, мой код просто не дойдет до той части переключателя, которая используется по умолчанию.
Кстати, 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
}
}