コマンドレットをセットアップして、パラメータ値が存在する場合は環境変数を使用するか、そうでない場合はプロンプトを表示できるようにしたいと考えていました。
function Test-Mandatory
{
[CmdletBinding()]
param(
[Parameter(Mandatory = { [string]::IsNullOrEmpty($Env:TEST_PARAM) })]
[string]
$foo = $Env:TEST_PARAM
)
Write-Host $foo
}
残念ながら、セットがあるかどうかに関係なく$Env:TEST_PARAM
、コマンドレットは常に $foo を要求するようです。
を使用するように検証を[ValidateScript({ #snip #})
やり直すことはできますが、必要な値を求める Powershell のプロンプトが表示されなくなり、$Env:TEST_PARAM
存在しないはずです。単純に検証エラーが発生します。
ここで2つの質問
- スクリプトブロックが尊重されていないように見えるのに、なぜスクリプトブロックを必須に割り当てることができるのでしょうか?
- 指定した基準を考慮して、デフォルトの PS プロンプト動作を取得する簡単な方法はありますか?