2013-05-02 7 views
0

다음 코드를 사용하여 C#을 사용하여 PowerShell 용 사용자 지정 Cmdlet을 만들려고합니다. 내 사용자 지정 cmdlet로 할 일은 사용자가 두 개의 매개 변수를 사용하여 호출해야합니다. 첫 번째 매개 변수는 -Text 또는 -File 또는 -Dir이어야하며 다음 매개 변수는 값을 지정하는 문자열이어야합니다 텍스트, 파일 또는 디렉토리. 내가 볼 수있는 한 그것은 잘 작동합니다. 그러나 내가 원하는 것을 성취하는 데 사용할 수있는 또 다른 간단한 방법이나보다 우아한 방법이 있는지 궁금합니다. 또는 내 솔루션을 얻을 수있는 가장 간단합니까? 그건 그렇고, SHA256Text, SHA256File 및 SHA256Directory는 필자가 작성한 사용자 정의 함수이므로 걱정하지 마십시오.SwitchParameter를 사용하는 PowerShell 사용자 지정 Cmdlet

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

당신은 사용자가 -Argument와 함께 -Text 중 하나 -File, 또는 -Dir을 지정에만 수 있도록 parameter sets를 사용할 수 있습니다. 그런 다음 스위치 (및 인수)를 선택적이 아닌 필수로 설정해야합니다. 이것은 스위치가 지정되었고 인수가 제공되었음을 사용자의 ProcessRecord 메소드가 알 수 있음을 의미합니다. 따라서 powershell에 내장 된 Get-Help cmdlet을 통해 사용할 수있는 출력을 제거 할 수 있습니다.

관련 문제