パラメーター
スクリプトをいくつか作成すると、スクリプトの柔軟性が低下することがあります。 スクリプトを調べて変更するという方法は効率的ではありません。 変更を処理するより優れた方法があります。パラメーターを使用するというものです。
パラメーターを使用すると、ユーザーがオプションを選択したり、スクリプトに入力を送信したりできるので、スクリプトが柔軟になります。 場合によっては、パラメーター値を変更するだけで済むため、スクリプトを頻繁に変更する必要がなくなります。
コマンドレット、関数、スクリプトはすべて、パラメーターを受け取ります。
パラメーターを宣言して使用する
パラメーターを宣言するには、キーワード Param
を開きかっこと閉じかっことともに使用する必要があります。
Param()
かっこ内で、パラメーターをコンマで区切って定義します。 一般的なパラメーター宣言は次のようになります。
# CreateFile.ps1
Param (
$Path
)
New-Item $Path # Creates a new file at $Path.
Write-Host "File $Path was created"
スクリプトには、ファイルを作成するために後からスクリプトで使用される $Path
パラメーターが記されています。 これでスクリプトの柔軟性が向上しました。
パラメーターを使用する
パラメーターを使用してスクリプトを呼び出すには、名前と値を指定する必要があります。 上記のスクリプトを CreateFile.ps1
と呼ぶことにします。 これを次のように呼び出します。
./CreateFile.ps1 -Path './newfile.txt' # File ./newfile.txt was created.
./CreateFile.ps1 -Path './anotherfile.txt' # File ./anotherfile.txt was created.
パラメーターを使用したので、このスクリプト ファイルを別の呼び方にするときに、ファイルを変更する必要はありません。
注
この特定のスクリプトは、New-Item
を呼び出すだけなので、パラメーターを使用してもあまりメリットが得られない可能性があります。 スクリプトが数行長ければ、パラメーターを使用する甲斐があります。
パラメーターを改善する
パラメーターを使用するスクリプトを最初に作成したときには、そのパラメーターの目的やパラメーターにとって妥当な値を正確に覚えていると思います。 時間が経つにつれ、これらの詳細を忘れてしまう可能性があります。 また、同僚にスクリプトを提供することもあります。 これらの場合の解決策は明確にすることであり、これによってスクリプトが使いやすくなります。 不適切なパラメーター値が渡された場合には、スクリプトを早期に失敗させる必要があります。 次に、パラメーターを定義するときに考慮すべき点をいくつか説明します。
- 必須ですか。 パラメーターは省略可能ですか、必須ですか。
- どのような値を使用できますか。 どのような値が適切ですか。
- 複数の型の値を受け入れますか。 パラメーターでは、文字列、ブール値、整数、オブジェクトなど、どの型の値でも受け入れますか。
- パラメーターを既定値に依存させることはできますか。 値を完全に省略し、代わりに既定値に依存させることはできますか。
- ユーザー エクスペリエンスをさらに向上させることはできますか。 ヘルプ メッセージを提供して、ユーザーにさらにわかりやすくすることはできますか。
アプローチを選択する
既定では、すべてのパラメーターは省略可能です。 この既定値はいくつかの場合で機能しますが、ユーザーにパラメーター値を指定させる必要があり、値が適切なものである必要がある場合があります。 ユーザーがパラメーターに値を指定していない場合は、スクリプトを終了するか、問題の解決方法をユーザーに通知する必要があります。 最悪のシナリオは、スクリプトが続行し、実行させたくない処理が行われることです。
スクリプトの安全性を高めるために使用できるアプローチがいくつかあります。 カスタム コードを記述して、パラメーター値を調べることができます。 または、ほぼ同じことを行うデコレーターを使用することもできます。 両方のアプローチを見てみましょう。
If/Else
を使用します。If/Else
コンストラクトでは、パラメーターの値を確認してから、処理内容を決定できます。 次に例を示します。Param( $Path ) If (-Not $Path -eq '') { New-Item $Path Write-Host "File created at path $Path" } Else { Write-Error "Path cannot be empty" }
Write-Error
の値を指定しない場合、スクリプトにより$Path
が実行されます。Parameter[]
デコレーターを使用します。 必要な入力回数が少ないより優れた方法は、Parameter[]
デコレーターを使用することです。Param( [Parameter(Mandatory)] $Path ) New-Item $Path Write-Host "File created at path $Path"
このスクリプトを実行し、
$Path
の値を省略した場合、値の入力を求めるダイアログが表示されます。cmdlet CreateFile.ps1 at command pipeline position 1 Supply values for the following parameters: Path:
スクリプトの実行時にユーザーに表示されるヘルプ メッセージを提供して、このデコレーターを改善できます。
[Parameter(Mandatory, HelpMessage = "Please provide a valid path")]
このスクリプトを実行すると、詳細情報については「
!?
」と入力するように求めるメッセージが表示されます。cmdlet CreateFile.ps1 at command pipeline position 1 Supply values for the following parameters: (Type !? for Help.) Path: !? # You type !? Please provide a valid path # Your Help message.
型を割り当てます。 パラメーターに型を割り当てると、たとえば、パラメーターがブール値ではなく文字列のみを受け入れるように指定できます。 このようにしてユーザーは何が予想されるかわかります。 パラメーターに型を割り当てるには、角かっこで囲んだ型をパラメーターの前に置きます。
Param( [string]$Path )
これら 3 つのアプローチは相互に排他的ではありません。 これらを組み合わせて、スクリプトの安全性を高めることができます。