IT TIP

PowerShell의 스위치 매개 변수와 같은 열거 형

itqueen 2021. 1. 6. 20:36
반응형

PowerShell의 스위치 매개 변수와 같은 열거 형


이 방식으로 PowerShell 스크립트에서 스위치 매개 변수를 사용하고 있습니다.

param(
    [switch] $Word,
    [switch] $Excel,
    [switch] $powerpoint,
    [switch] $v2007,
    [switch] $v2010,
    [switch] $x86,
    [switch] $x64,
)

더 많은 열거 형 스타일을 갖기 위해 깔끔한 방법을 찾으려고 노력하고 있습니다. 누구나 짐작할 수 있듯이 사용자가 단어, 엑셀 및 파워 포인트 중에서 선택하기를 원합니다. 그리고 x2007과 v2010 사이.

입력 매개 변수 열거 형 스타일을 얻는 깔끔한 방법이 있습니까?

PowerShell을 처음 사용합니다. 그래서 이것이 내가 명백한 것을 모르는 것처럼 들리면 그것에 대해 읽을 수있는 링크를 알려주십시오.


내가 사용하는 것 ValidateSet대신에 매개 변수 속성을.

보낸 사람 : about_Functions_Advanced_Parameters

ValidateSet 속성은 매개 변수 또는 변수에 유효한 값 세트를 지정합니다. Windows PowerShell에서는 매개 변수 또는 변수 값이 집합의 값과 일치하지 않으면 오류를 생성합니다.

예제 함수 :

function test-value
{
    param(
        [Parameter(Position=0)]
        [ValidateSet('word','excel','powerpoint')]
        [System.String]$Application,

        [Parameter(Position=1)]
        [ValidateSet('v2007','v2010')]
        [System.String]$Version
    )


    write-host "Application: $Application"
    write-host "Version: $Version"
}   


PS > test-value -application foo

산출:

test-value : Cannot validate argument on parameter 'Application'. The argument "foo" does not belong to the set "word,excel,powerpoint" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.


다음 ValidateSet속성을 사용할 수 있습니다 .

function My-Func
{
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet('Word', 'Excel', 'PowerPoint', 'v2007', 'v2010', 'x86', 'x64')]
        [String]$MyParam
    )

    Write-Host "Performing action for $MyParam"
}

My-Func -MyParam 'Word'
My-Func -MyParam 'v2007'
My-Func -MyParam 'SomeVal'

산출:

Performing action for Word
Performing action for v2007
My-Func : Cannot validate argument on parameter 'MyParam'. The argument "SomeVal" does not belong to the set "Word,Excel,PowerPoint,v2007,v2010,x86,x64" specified by the ValidateSet attribute. Supply an argument that is in the
 set and then try the command again.
At C:\Users\George\Documents\PowerShell V2\ValidateSetTest.ps1:15 char:17
+ My-Func -MyParam <<<<  'SomeVal'
    + CategoryInfo          : InvalidData: (:) [My-Func], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,My-Func

PowerShell 팀 의이 블로그 게시물 은 PowerShell 1.0에서이를 수행하는 방법을 정의합니다. PowerShell 2.0에서는 다음과 같이 Add-Type을 사용할 수 있습니다.

C:\PS> Add-Type -TypeDefinition @'
>> public enum MyEnum {
>> A,
>> B,
>> C,
>> D
>> }
>> '@
>>

업데이트 : 열거 형을 사용하는 방법은 다음과 같습니다.

C:\PS> function foo([MyEnum]$enum) { $enum }
C:\PS> foo ([MyEnum]::A)
A

인수를 Type으로 구문 분석하려면 인수를 괄호로 묶어야합니다. 이것은 인수가 문자열과 다소 비슷하게 취급되기 때문에 필요합니다. 이것을 알면 간단한 문자열 형식으로 열거 형을 전달할 수도 있으며 powershell이 ​​알아낼 것입니다.

C:\PS> foo A
A
C:\PS> $arg = "B"
C:\PS> foo $arg
B
C:\PS> foo F
error*

오류-F는 열거 된 값 중 하나가 아닙니다. 유효한 값은 A, B, C, D입니다. *

참조 URL : https://stackoverflow.com/questions/3736188/enum-like-switch-parameter-in-powershell

반응형