PowerShell を使用して変数のデータ型をテストする

Marion Paul Kenneth Mendoza 2022年8月18日
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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell Variable