반응형
빈 문자열을 허용하는 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
반응형
'programing' 카테고리의 다른 글
SQLite3 및 여러 프로세스 (0) | 2023.09.20 |
---|---|
C# 문자열 값을 이스케이프된 문자열 리터럴로 변환할 수 있습니까? (0) | 2023.09.20 |
라라벨:업데이트 시 열이 변경되었는지 관찰자에게 확인 (0) | 2023.09.20 |
도커 네트워킹 - nginx: [emerg] 호스트가 업스트림에서 찾을 수 없음 (0) | 2023.09.20 |
WooCommerce의 My Accounts 페이지에 제품명 및 구매 노트 표시 (0) | 2023.09.20 |