programing

빈 문자열을 허용하는 PowerShell Function Parameters의 유효성을 검사하는 방법은 무엇입니까?

cafebook 2023. 9. 20. 20:43
반응형

빈 문자열을 허용하는 PowerShell Function Parameters의 유효성을 검사하는 방법은 무엇입니까?

이 방법을 사용해 보십시오.

function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    [string]
    $Text
    )
    $text
}

function f2
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    #[string]
    $Text
    )
    $text
}

function f3
{
    param(
    [Parameter(Mandatory=$False,ValueFromPipelineByPropertyName=$true)]
    [string]
    $Text
    )
    $text
}

f1 ''
f2 ''
f3 ''

여기서 f1은 에러를 던집니다.자 시도해보세요

f2 $null 
f3 $null    

이번에는 f2만 에러를 던집니다.제가 원하는 것은 f 함수이므로,

f '' # is accepted
f $null # returns an error

Mandatory 특성은 null 및 empty 값을 차단하고 값을 입력하라는 메시지를 표시합니다.빈 값(null 포함)을 허용하려면 Allow EmptyString 매개 변수 특성을 추가합니다.

function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    [AllowEmptyString()]
    [string]$Text
    )
    $text
}

여기에 주의해야 할 사항에 맞는 솔루션이 있습니다.

function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    $Text
    )
    Write-Host 'Working'
    $text
}

f1 ''
f1 $null

출력:

Working
f1 : Cannot bind argument to parameter 'Text' because it is null.

주의사항

요구사항에 맞추기 위해 우리는 명시적인 형식의 선언을 생략해야 합니다.[string]. 문제는 PowerShell이 null을 빈 문자열로 변환하는 경향이 있다는 것입니다.[string]유형을 지정합니다.따라서 형식 선언을 사용하면 실제로 null 값이 함수에 나타나지 않습니다.

추신: 다음은 관련 문제를 제출한 내용입니다.null을 null로 a에 전달할 수 없습니다.String 형식의 매개 변수가 있는 NET 메서드

완성도를 위해 입력 내용을 문자열 유형에 대해 검증하려면 매개 변수 선언 후에 수행할 수 있습니다.

function f1
{
    param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
    $Text
    )
    if (!($text -eq '') -and !($text -as [string])) {write-host "wrong type"; return }
    $text
}

이 기능은 다음과 같이 동작합니다.

  • "인수를 바인딩할 수 없습니다." 입력이 다음과 같은 경우 예외$null
  • 입력이 빈 문자열일 때 전달됩니다.
  • 입력이 문자열이 아닌 경우 잘못된 메시지 유형으로 종료됩니다.

언급URL : https://stackoverflow.com/questions/6403342/how-to-validate-powershell-function-parameters-allowing-empty-strings

반응형