PowerShell を使用して変数のデータ型をテストする
私たちが通常使用する PowerShell の手法の 1つは、ユーザー入力を取得して変数に格納することです。ただし、ユーザーから取得したユーザー入力が、予想されるデータ型と異なる場合があります。
1つの例は、Int
または整数データ型である年齢の代わりに、彼の名前、String
データ型を入力したユーザーです。この記事では、変数のデータ型の不一致を処理する方法と、PowerShell を使用してそれらを適切に修正する方法について説明します。
PowerShell を使用して変数をテストする
変数のデータ型の不一致を処理する 3つの例を示します。パラメータの使用から始めましょう。
パラメータを使用して変数をテストする
ユーザー入力を求める 1つの方法は、スクリプトの実行中に必須パラメーターを事前に構成することです。パラメータを事前に決定するときに、パラメータをサポートするデータ型を追加できます。
このようにして、スクリプトは、スクリプトが開始する前に、ユーザーが有効な変数を渡しているかどうかを判断できます。例を見てみましょう。
スクリプトを実行しているユーザーの年齢が必要だとします。以下のスクリプトを実行して、スクリプトが整数値のみを受け入れるように強制できます。
サンプルコード(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."
おそらく、スクリプトの実行中にユーザー入力を処理しています。次のメソッドは、スクリプトの実行中に変数のデータ型をチェックします。
演算子を使用して変数をテストする
変数のデータ型をチェックする別の方法は、条件演算子を使用することです。条件演算子は、ブール変数を生成する 2つ以上の値を一致させる関数です。
この記事では、条件演算子 -is
を使用します。この状況では、変数をデータ型に直接照合することで、-is
演算子を使用できます。
サンプルコード:
$age -is [Int]
出力:
True
たとえば、以下のコードスニペットでは、変数に整数値がある場合、スクリプトは True
の値を出力します。それ以外の場合は、False
。これらの出力はブール値をエクスポートするため、条件ステートメントを使用して、たとえば、変数のデータ型を -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