2013-01-18 15 views
6

私は、必須パラメータ画面を使用する場合、不正確な結果を返す以下の設定を含むスクリプトを持っています。入力の際に何らかの種類の検証やキャストを行えないような気がします。どうすれば解決できますか?Powershell必須bool常にtrue

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

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

これは私がそれを呼び出す場合は完璧に動作します。\するMyScript.ps1 -autoinstall $ falseのが、$自動インストール変数は関係なく、私は「$ false」に必須のパスワードプロンプトを使用して入力した場合、私は渡すものの、常に真であります。

編集:

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

答えて

8

入力文字列として解釈され、あなたがBOOLする文字列のPowerShellのの強制の結果を見ているので、問題が発生します。例:

59> [bool]'0' 
True 

60> [bool]'false' 
True 

61> [bool]'False' 
True 

62> [bool]'$false' 
True 

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

63> [bool]'' 
False 
5

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

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 
+0

これは私のためには機能しません - アプリケーションの動作を制御するために必須パラメータのコレクションを使用する単一のショートカットをプッシュする必要があります。 –

+0

私はこの問題を理解できないので、今日はちょっとばかばかしいと感じています:)スイッチは必須のブール値です。指定するか指定しないで、スクリプトで値を指定することができます。スイッチは私の目には完璧です。概念実証のための私の答えの更新された出力セクションを参照してください。 –

+0

すでにショートカット上にある他のコマンドラインパラメータに関係なく、スクリプトを呼び出すことができ、必須のパラメータ画面を介して値入力を求めるプロンプトが必要です。スイッチの必須パラメタでスクリプトを試し、コマンドラインに値を入力しないでください。あなたは私が何を話しているのを見るでしょう。 –

関連する問題