ずいぶんとラクチンです。以下のように書くだけで誤ったパラメータを与えると赤文字でエラーメッセージを適宜出力してくれます。
パラメータチェック
Param(
[ValidateSet("DB01","DB02","DB03")] $Arg1
)
サンプルスクリプト
function Test-001 { Param( [ValidateSet('DB01', 'DB02', 'DB03')][string] $arg1, [string] $arg2, [int] $arg3, [switch] $arg4 ) Write-Host "arg1 : $arg1" Write-Host "arg2 : $arg2" Write-Host "arg3 : $arg3" Write-Host "arg4 : $arg4" $val1 = $arg3 + 1 $val2 = $arg3 * 1 Write-Host "arg3 + 1="$val1 " arg3 * 1="$val2 if ($arg2 -eq $null) { Write-Host "arg2 nullです" } if ($arg2 -eq '') { Write-Host "arg2 空文字です" } if ($arg3 -eq $null) { Write-Host "arg3 nullです" } if ($arg3 -eq '') { Write-Host "arg3 空文字です" } return }
実行例1
arg1へあらかじめ決められた値以外を設定すると以下のようなエラー処理をしてくれます。
PS C:\temp\work> Test-001 -arg1 db0
Test-001 : パラメーター 'arg1 の引数を確認できません。引数 "db0" は、ValidateSet 属性で指定されたセット "DB01,DB02,DB03
" に属していません。このセットの引数を指定して、コマンドを再度実行してください。
発生場所 行:1 文字:16
+ Test-001 -arg1 db0
+ ~~~
+ CategoryInfo : InvalidData: (:) [Test-001]、ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Test-001
PS C:\temp\work>
実行例2
arg1のパラメータチェックを確認したので他の動き確認します。
-- string型(arg2)、int型(arg3)のパラメータ未設定の場合は空文字が設定される事わかります。
-- int型については空文字は0として振る舞います
-- switch を指定した場合は(これはデータ型ではありません)未設定の場合Falseとなります。
--
PS C:\temp\work> Test-001 -arg1 db01
arg1 : db01
arg2 :
arg3 : 0
arg4 : False
arg3 + 1= 1 arg3 * 1= 0
arg2 空文字です
arg3 空文字です
PS C:\temp\work>
-- string型(arg2)、int型(arg3)にそれぞれ空文字''を渡してみても先ほどの省略した時
-- と同じ動作です。arg4についてはvalue値を指定せずとも-arg4との記載だけでtrueになります。
--
PS C:\temp\work> Test-001 -arg1 db01 -arg2 '' -arg3 '' -arg4
arg1 : db01
arg2 :
arg3 : 0
arg4 : True
arg3 + 1= 1 arg3 * 1= 0
arg2 空文字です
arg3 空文字です
PS C:\temp\work>
自身で作ったチェックの結果を同様にエラー出力する場合
Write-Error -Messageを使います。
if( -not (Test-Path $Arg1 ) ) {
Write-Error -Message "指定のファイルが存在しません。" -ErrorAction Stop
}
サンプルスクリプト
function Test-002 { Param( [ValidateSet('DB01', 'DB02', 'DB03')][string] $arg1 = 'DB02', [string] $arg2 ) Write-Host $arg1 Write-Host $arg2 if ( -not (Test-Path $Arg2 ) ) { Write-Error -Message "指定のファイルが存在しません。" -ErrorAction Stop } Write-Host "------------" $files = Get-Item $Arg2\*.txt foreach ($f in $files) { Write-Host $f } return }
実行例1
-- -ErrorAction Stop と記載しているので後の処理は実行されません。
--
PS C:\temp\work> Test-002 -arg2 .\work
DB02 <-- デフォルト設定「 $arg1 = 'DB02'」をしているので省略しても設定できています。
.\work
Test-002 : 指定のファイルが存在しません。
発生場所 行:1 文字:1
+ Test-002 -arg2 .\work
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Test-002
PS C:\temp\work>
-- 正常に動作できた場合
--
PS C:\temp\work> Test-002 -arg2 .\temp
DB02
.\temp
------------
C:\temp\work\temp\sample1.txt
C:\temp\work\temp\sample2.txt
PS C:\temp\work>
arg1へあらかじめ決められた値以外を設定すると以下のようなエラー処理をしてくれます。
コメント