2013-01-18 6 views
6

Zorunlu parametre ekranını kullanırsam hatalı bir sonuç döndüren aşağıdaki ayarları içeren bir komut dosyası var. Benim girişimde bir tür tip doğrulama ya da döküm yapmama gibi hissettiriyor. Bunu nasıl çözebilirim?Powershell zorunlu bool her zaman true

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

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

Bu Birlikte dersek mükemmel çalışıyor. \ Myscript.ps1 -autoinstall $ yanlış ama $ autoinstall değişken olursa olsun ben '$ false' zorunlu şifre istemini kullanın ve girersem geçmesi ne zaman doğrudur .

DÜZENLEME: Benim için çalışmayan bir anahtarın kullanılması

. Ben gerçekten bu uçmak kullanımı için kullanıcı kısayolları için hem betik hem de zorunlu parametre fonksiyonu olması gerekir.

cevap

8

girdi bir dize olarak yorumlanır ve bool için dizesinin PowerShell en zorlama sonuçları elde edip sorun oluşur örn:

59> [bool]'0' 
True 

60> [bool]'false' 
True 

61> [bool]'False' 
True 

62> [bool]'$false' 
True 

:

parametre ie için istendiğinde sadece enter tuşuna, "yanlış" yolu yürütmek için almak için

5

Neden sadece anahtar kullanmıyorsunuz? Bu deneyin:

param ([switch]$autoinstall) 

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

Çıktı:

[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

Bu benim için çalışmaz - Uygulamanın davranışını denetlemek için zorunlu parametrelerden oluşan bir koleksiyon kullanan tek bir kısayolu dışarı çıkarmam gerekiyor. Gönderinin orijinal sürümüne not düştüm .. Onu tekrar düzenleyeceğim. –

+0

Bugün biraz aptal hissediyorum, çünkü sorunu anlayamıyorum :) Bir anahtar zorunlu bir boole. Ya siz belirtiyorsunuz ya da yapmıyorsunuz ve bir senaryoda onun değerini belirtebilirsiniz. Anahtar gözlerimde mükemmel. Kavram kanıtı için cevabımdaki güncellenmiş çıktı bölümüne bakın. –

+0

Betiğin, kısayolda bulunan diğer komut satırı parametrelerine bakılmaksızın çağrılabilmesi ve bir değer girişine sahip olmak için zorunlu parametre ekranından bilgi alması gerekir. Komut dosyanızı anahtar için zorunlu bir param ile deneyin ve komut satırında bir değer girmeyin. Ne hakkında konuştuğumu göreceksin. –