2014-07-10 2 views
1

을 던지는없이 나는이파워 쉘의 매개 변수 유효성 검사 예외

Param(
    [Parameter(Mandatory=$True,Position=1)] 
    [string]$variable1, 

    [Parameter(Mandatory=$True,Position=2)] 
    [string]$variable2, 

    [Parameter(Mandatory=$True,Position=3)] 
    [int]variable3 
    )... something happens then 

같은 PowerShell 스크립트가 지금은 예를 들어 변수가 1 인 경우 스크립트에 가기 전에 확인하려면이 A, B 또는 C 변수 2는 D는 E입니다 또는 F와 변수 3은 1,4,5

입력 후 바로 확인할 수 있습니까? 그래서 만약 variable1 오류가 있다면 다시해야하지만 variable2에 오류가 있다면 variable2뿐 아니라 variable1도 재실행해야합니까?

답변

1

ValidateSet 특성을 사용하여 허용되는 값을 지정하십시오.

도움말 문서 about_Functions_Advanced_Parameters에서

:

ValidateSet Attribute 
    The ValidateSet attribute specifies a set of valid values for a 
    parameter or variable. Windows PowerShell generates an error if a 
    parameter or variable value does not match a value in the set. In 
    the following example, the value of the Detail parameter can only 
    be "Low," "Average," or "High." 

    Param 
     (
     [parameter(Mandatory=$true)] 
     [ValidateSet("Low", "Average", "High")] 
     [String[]] 
     $Detail 
    ) 
+0

괜찮 으면 작동하지만 예외가 발생하고 사용자에게 잘못된 매개 변수를 다시 입력하도록 요청하지 않고 스크립트를 종료합니다. –

0
function testFunc{ 
    Param(
    [Parameter(Mandatory=$True,Position=1)] 
    $variable1, 

    [Parameter(Mandatory=$True,Position=2)] 
    $variable2, 

    [Parameter(Mandatory=$True,Position=3)] 
    $variable3) 

    $acceptable1 = @("A", "B", "C") 
    $acceptable2 = @("D", "E") 
    $acceptable3 = @(1, 2, 3) 

    while((-Not($acceptable1.Contains($variable1))) -or (-Not($acceptable2.Contains($variable2))) -or (-Not($acceptable3.Contains($variable3)))){ 
     if (-Not($acceptable1.Contains($variable1))){ 
      $variable1 = Read-Host "Please re-enter Variable1" 
     } 
     if (-Not($acceptable2.Contains($variable2))){ 
      $variable2 = Read-Host "Please re-enter Variable2" 
     } 
     if (-Not($acceptable3.Contains($variable3))){ 
      $variable3 = Read-Host "Please re-enter Variable3" 
      if([int]$variable3 -eq [double]$variable3){ 
       $variable3 = [int] $variable3 
      } 
     } 
    } 
} 

가장 우아하지,하지만 작동합니다.

3 세트의 허용 가능한 입력을 정의한 다음 세트에 대해 점검했습니다. 각 입력이 올 때까지 계속 반복됩니다. Read-Host는 문자열을 가져 오기 때문에 int 형 변환이 double 형 변환과 같은지 확인한 다음 해당 변수를 int로 설정했습니다.

이렇게하면 잘못된 입력을 사용자가 지정한대로 수정하라는 메시지 만 표시됩니다.

관련 문제