2013-05-02 2 views
0

У меня есть следующий код, где я пытаюсь создать собственный Cmdlet для PowerShell с помощью C#. Что я хочу сделать с моим пользовательским командлетом, так это то, что пользователь должен вызвать его с двумя параметрами, из которых первым должен быть -Text или -File или -Dir, а следующий должен быть значением, строкой, которая задает значение для текста, файла или каталога. Он прекрасно работает, пока я вижу. Но мне просто интересно, есть ли еще один простой метод или более элегантный метод, который я могу использовать для достижения того, чего хочу. Или мое решение - самое простое, что он может получить? Кстати, SHA256Text, SHA256File и SHA256Directory - это обычные пользовательские функции, которые я написал, поэтому не беспокойтесь о них.Командлет PowerShell с помощью SwitchParameter

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 
    } 
} 

ответ

3

Вы можете использовать parameter sets, чтобы убедиться, что пользователь может только указать один из -Text, -File или -Dir в сочетании с -Argument. Затем вы должны сделать свои ключи (и аргументы) обязательными, а не необязательными. Это означало бы, что ваш метод ProcessRecord знал бы, что указатель был указан и что аргумент предоставлен. Таким образом, вы можете удалить свой результат использования, который будет доступен через встроенный командлет Powershell Get-Help.

Смежные вопросы