1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShellでregularとValidateSetを使用してパラメータを検証する

2022-02-05 23:13:31

PowerShell 2.0以降の場合

PowerShell を使用して関数を作成する場合、パラメータに期待する値を PowerShell に伝えるようにしてください。たとえば、ユーザーが曜日を入力する場合、次のように指定します。

コピーコード コードは以下の通りです。

function Get-Weekday
{
  param
  (
    $Weekday
  )
  "You chose $Weekday"
}

この時点で、ユーザーは任意の値を入力することができます。たとえそれが第7週のように法的な週でない場合でもです。
コピーコード コードは以下の通りです。

PS> Get-Weekday -Weekday NoWeekday
You chose NoWeekday

また、正規表現型のバリデーションを見たことがある人もいるかもしれません。

コピーコード コードは以下の通りです。

function Get-Weekday
{
param
(
[ValidatePattern('Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday')]
$Weekday
)
"You chose $Weekday"
}

これでPowershellは、ユーザーが指定したパターンに一致しない文字列を入力すると例外をスローしますが、例外メッセージは十分に親切ではありません。また、コンソールやISEエディタでは、パラメータを出力する際に以下のようなインテリジェントなプロンプトは表示されません。

そこで、ValidateSetを使うのがベターな方法でしょう。

コピーコード コードは以下の通りです。

function Get-Weekday
{
param
(
[ValidateSet('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')]
$Weekday
)
"You chose $Weekday"
}

パラメータを出力する際に指定した値群に制限されるようになり、さらにISEで許可された値のリストを表示するよう、ユーザーにインテリジェントに促すようになりました。必要なパラメーターをちょうど記述している.NET タイプの列挙値を見つけることができれば、さらに簡単です。
コピーコード コードは以下の通りです。

function Get-Weekday
{
param
(
[System.DayOfWeek]
$Weekday
)
"You chose $Weekday"
}