2010年1月4日月曜日

PowerShellのパラメータ属性に関するメモ、その2

PowerShellでは、入力パラメータの検証を自動化することができます。

VBScriptで(他の言語でも)プログラムを作成する場合、
場合によっては引数チェックだけでもかなりのコード量になっていました。
それに対して、Windows PowerShellでは、Paramセクション内に
検証用属性を書くだけで済みます。すごいっすねぇ、PowerShell。

コードも減り、その結果テストも減る、ということになるとは思いますが、
ブラックボックステストは厚めに実施する必要がある点は忘れぬよう。

以下、検証属性のいくつかを示します。
検証属性名 ざっくりとした説明
AllowNull() 必須コマンドレットパラメータへのNull値の設定を許容。
AllowEmptyString() 必須コマンドレットパラメータへの空文字の設定を許容。
ValidateScript(スクリプトブロック) パラメータ引数検証用のスクリプトを指定。結果がTrueの場合のみ有効とする。
ValidateSet(とり得る値の配列) パラメータ引数の有効値のセットを指定。
ValidateLength(n,m) パラメータ引数の最小の長さ(n)と最大の長さ(m)を設定。
※string型またはstring[]型にのみ使用可能。
ValidateRange(n,m) パラメータ引数の最小値(n)と最大値(m)を設定。
※文字列でも浮動小数点数にも使用可能。文字列の場合は、パラメータが整数として評価される。浮動小数点数の場合は、パラメータを四捨五入した数として評価される。
ValidatePattern(パターン文字列) パラメータ引数の最小値(n)と最大値(m)を設定。
※汎用的だが人によっては読めないかも?

パラメータ検証に失敗した場合には、エラーが発生してスクリプトが止まります。

実行例:
# sample3.ps1
Function Test-Function
{
Param
(
[string[]]
[Parameter(Mandatory=$true)]
[ValidateLength(1,10)]
$Test
)

Process
{ $Test.GetType() | Out-Host }
}

Test-Function -Test "12345678901"

#出力↓
test-function : パラメーター 'Test の引数を確認できません。
引数の長さ 11 が長すぎます。引数の長さを "10" 以下にして、
コマンドを再度実行してください。
(以下略)


参考コマンド:
Get-Help About_Functions_Advanced_Parameters

0 件のコメント: