9

必須パラメータ画面を使用すると誤った結果を返す次の設定を含むスクリプトがあります。ある種の型の検証や入力へのキャストに失敗しているように感じます。どうすれば解決できますか?

param ( [Parameter(Mandatory=$true)] [bool]$autoinstall )

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}

これは、。\ myscript.ps1 -autoinstall $ falseで呼び出すと完全に機能しますが、必須のパスワードプロンプトを使用して「$ false」と入力すると、何を渡しても$autoinstall変数は常にtrueになります。

編集:

スイッチを使用してもうまくいきません。私は本当にこれがスクリプト可能であり、オンザフライで使用するためのユーザーショートカットの必須パラメーター関数である必要があります。

4

2 に答える 2

10

この問題は、入力が文字列として解釈され、PowerShell が文字列を bool に強制変換した結果が表示されるために発生します。

59> [bool]'0'
True

60> [bool]'false'
True

61> [bool]'False'
True

62> [bool]'$false'
True

実行する "false" パスを取得するには、パラメーターの入力を求められたときに Enter キーを押します。

63> [bool]''
False
于 2013-01-18T21:08:30.853 に答える
7

スイッチを使用しないのはなぜですか?これを試して:

param ( [switch]$autoinstall )

if ( $autoinstall  ) 
{
    echo "Autoinstall true"
}
else
{
    echo "Autoinstall false"
}

出力:

[20:40:46] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1
Autoinstall false
[20:42:36] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall
Autoinstall true
[20:42:38] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall:$true
Autoinstall true
[20:42:41] PS-ADMIN C:\Users\Graimer\Desktop> .\Untitled4.ps1 -autoinstall:$false
Autoinstall false
于 2013-01-18T18:59:04.720 に答える