PowerShell을 사용하여 변수의 데이터 유형 테스트
우리가 일반적으로 사용하는 PowerShell의 한 가지 기술은 사용자 입력을 받아 변수에 저장하는 것입니다. 그러나 사용자로부터 받은 사용자 입력이 예상 데이터 유형과 다른 상황이 있습니다.
한 가지 예는 Int
또는 정수 데이터 유형인 나이 대신 String
데이터 유형으로 이름을 입력한 사용자입니다. 이 기사에서는 가변 데이터 유형 불일치를 처리하는 방법과 PowerShell을 사용하여 적절하게 수정하는 방법에 대해 설명합니다.
PowerShell을 사용하여 변수 테스트
가변 데이터 유형 불일치를 처리하는 세 가지 예를 보여 드리겠습니다. 매개변수 사용부터 시작하겠습니다.
매개변수를 사용하여 변수 테스트
사용자 입력을 요청하는 한 가지 방법은 스크립트 실행 중에 필수 매개변수를 미리 구성하는 것입니다. 매개변수를 미리 결정할 때 매개변수를 지원하는 데이터 유형을 추가할 수 있습니다.
이런 식으로 스크립트는 스크립트가 시작되기 전에 사용자가 유효한 변수를 전달하고 있는지 알 수 있습니다. 예제를 살펴보겠습니다.
스크립트를 실행하는 사용자의 나이가 필요하다고 가정해 보겠습니다. 아래 스크립트를 실행하여 스크립트가 정수 값만 허용하도록 할 수 있습니다.
예제 코드(param.ps1):
param(
[Parameter(Mandatory)]
[Int]$age
)
Write-Output $age
사용자가 .\param.ps1 -age 2
를 사용하여 실행했다고 가정하면 스크립트는 숫자 출력과 함께 이를 반환해야 합니다.
입력:
Supply values for the following parameters:
age: 2
출력:
2
그러나 사용자가 정수 이외의 데이터 유형을 가진 다른 값(예: .\param.ps1 -age "hello"
)을 전달하려고 하면 스크립트에서 오류가 발생합니다.
입력:
Supply values for the following parameters:
age: hello
출력:
"System.Int32". Error: "Input string was not in a correct format."
아마도 스크립트 실행 중에 사용자 입력을 처리하고 있을 것입니다. 다음 메소드는 스크립트 실행이 진행되는 동안 변수의 데이터 유형을 확인합니다.
연산자로 변수 테스트
변수의 데이터 유형을 확인하는 또 다른 방법은 조건 연산자를 사용하는 것입니다. 조건 연산자는 부울 변수를 생성하는 둘 이상의 값을 함께 일치시키는 함수입니다.
이 기사에서는 조건 연산자 -is
를 사용합니다. 이 상황에서 변수를 데이터 유형에 직접 일치시켜 -is
연산자를 사용할 수 있습니다.
예제 코드:
$age -is [Int]
출력:
True
예를 들어 아래 코드 스니펫을 사용하면 변수에 정수 값이 있는 경우 스크립트에서 True
값을 출력합니다. 그렇지 않으면 거짓
. 이러한 출력은 부울 값을 내보내기 때문에 조건문을 사용하여 -as
연산자로 변수의 데이터 유형을 변환하는 것과 같은 특정 작업을 수행할 수 있습니다.
예제 코드:
if($age -is [Int]){
Write-Output "Age $age is an integer"
}else{
Write-Output "Age is not an integer... Converting"
try{
$age = $age -as [Int]
Write-Output "Converted! Age $age is now an integer"
}catch{
Write-Output "Input is a string, could not be converted."
}
}
출력:
Age is not an integer... Converting
Converted! Age 2 is now an integer
함수로 변수 테스트하기
마지막 예제는 연산자를 사용하여 사용자 정의 함수를 생성할 것이기 때문에 이전 예제와 유사합니다. 이 연산자를 사용하여 변수의 데이터 유형을 확인하고 부울 값을 반환하는 함수를 만들 수 있습니다.
아래 함수의 좋은 점은 이전 예제와 비교하여 이 함수가 음수 값도 확인하여 보다 정확한 결과를 제공한다는 것입니다.
예제 코드:
function isNumeric($_){
return $_ -is [int] -or $_ -is [int16] -or $_ -is [int32] -or $_ -is [int64]
}
isNumeric(-1)
출력:
True
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn