2013-01-18 12 views
6

Ich habe ein Skript, das die folgenden Einstellungen enthält, die ein falsches Ergebnis zurückgibt, wenn ich den obligatorischen Parameterbildschirm verwende. Es fühlt sich so an, als ob es keine Art von Verifikation oder Eingabe von Eingaben gibt. Wie kann ich es lösen? DiesePowerShell obligatorisch Bool immer wahr

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

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

funktioniert perfekt, wenn ich es so nennen mit. \ Myscript.ps1 -autoinstall $ false aber die $ AutoInstall- Variable ist immer wahr, unabhängig von dem, was ich passieren, wenn ich die obligatorische Kennworteingabeaufforderung verwenden, und geben Sie ‚$ false‘ .

EDIT:

einen Schalter für mich nicht funktioniert. Ich muss dies sowohl skriptfähig als auch die obligatorische Parameterfunktion für Benutzerverknüpfungen für die direkte Verwendung haben.

Antwort

8

Das Problem tritt auf, weil die Eingabe als String interpretiert wird und Sie die Ergebnisse der Powershell Zwang von String sehen in bool zB:

59> [bool]'0' 
True 

60> [bool]'false' 
True 

61> [bool]'False' 
True 

62> [bool]'$false' 
True 

Um den "falschen" Pfad zur Ausführung zu bekommen, drücken Sie einfach die Eingabetaste, wenn Sie nach dem Parameter gefragt werden, zB:

63> [bool]'' 
False 
5

Warum nicht einfach Schalter verwenden? Versuchen Sie folgendes:

param ([switch]$autoinstall) 

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

Ausgang:

[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

Dies funktioniert nicht für mich - ich muss eine einzelne Verknüpfung, die eine Sammlung von obligatorischen Parametern verwendet, um das Verhalten der App zu steuern. Hatte eine Notiz in diesem Sinne in der ursprünglichen Version meines Beitrags .. Ich werde es wieder bearbeiten. –

+0

Ich fühle mich ein bisschen dumm heute, weil ich das Problem nicht verstehen kann :) Ein Schalter ist eine obligatorische boolean. Entweder Sie geben es an oder Sie tun es nicht, und in einem Skript können Sie seinen Wert angeben. Der Schalter ist in meinen Augen perfekt. Siehe den aktualisierten Ausgabeabschnitt in meiner Antwort für Proof-of-Concept. –

+0

Das Skript muss - unabhängig von anderen Befehlszeilenparametern, die bereits auf der Verknüpfung stehen - aufgerufen werden können und über den obligatorischen Parameterbildschirm aufgefordert werden, einen Wert einzugeben. Versuchen Sie Ihr Skript mit einem obligatorischen Parameter für den Schalter und geben Sie keinen Wert an der Befehlszeile ein. Du wirst sehen, wovon ich rede. –