2013-01-18 26 views
6

我有一個腳本,其中包括以下設置,如果我使用強制性參數屏幕返回不正確的結果。感覺就像它沒有對我的輸入做某種類型的驗證或投射。我該如何解決它?Powershell強制布爾總是對的

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

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

這工作完全,如果我把它用。\ myscript.ps1 -autoinstall $假的,但不管是什麼我通過,如果我使用強制密碼提示,輸入「$假」的$自動安裝變量始終是真實的。

編輯:

使用開關不適用於我。我真的需要讓這個腳本和用於用戶快捷方式的強制性參數功能在飛行中使用。

回答

8

出現該問題的原因是輸入被解釋爲一個字符串,你看到的字符串的PowerShell的脅迫的結果爲bool如:

59> [bool]'0' 
True 

60> [bool]'false' 
True 

61> [bool]'False' 
True 

62> [bool]'$false' 
True 

要獲得執行的「錯誤」路徑,只需在提示輸入參數時按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

腳本需要能夠被調用 - 無論快捷方式中已有的其他命令行參數如何 - 並通過強制參數屏幕提示輸入值。使用交換機的強制參數來嘗試腳本,並且不要在命令行中輸入值。你會看到我在說什麼。 –