2013-01-18 28 views
6

Tôi có tập lệnh bao gồm các cài đặt sau sẽ trả về kết quả không chính xác nếu tôi sử dụng màn hình tham số bắt buộc. Nó cảm thấy như nó không làm một số loại xác minh hoặc đúc trên đầu vào của tôi. Làm thế nào tôi có thể giải quyết nó?Powershell bắt buộc bool luôn đúng

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

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

này hoạt động hoàn hảo nếu tôi gọi nó với. \ Myscript.ps1 -autoinstall $ false nhưng biến $ autoinstall luôn luôn đúng bất kể những gì tôi vượt qua nếu tôi sử dụng dấu nhắc mật khẩu bắt buộc và nhập '$ false' .

EDIT:

Sử dụng công tắc không hoạt động đối với tôi. Tôi thực sự cần phải có cả hai kịch bản và chức năng tham số bắt buộc cho các phím tắt người dùng để sử dụng khi đang bay.

Trả lời

8

Vấn đề này xảy ra bởi vì các đầu vào được xem như là một chuỗi và bạn nhìn thấy kết quả của sự ép buộc của chuỗi PowerShell để bool ví dụ:

59> [bool]'0' 
True 

60> [bool]'false' 
True 

61> [bool]'False' 
True 

62> [bool]'$false' 
True 

Để có được đường dẫn "sai" để thực thi, chỉ cần nhấn enter khi bạn được nhắc tham số tức là:

63> [bool]'' 
False 
5

Tại sao không chỉ sử dụng nút gạt? Hãy thử điều này:

param ([switch]$autoinstall) 

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

Output:

[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

Điều này không hiệu quả đối với tôi - Tôi cần phải đẩy ra một lối tắt duy nhất sử dụng tập hợp các thông số bắt buộc để kiểm soát hành vi của ứng dụng. Đã có một lưu ý cho hiệu ứng đó trong phiên bản gốc của bài đăng của tôi .. Tôi sẽ chỉnh sửa lại. –

+0

Tôi cảm thấy hơi ngu ngốc ngày hôm nay, bởi vì tôi không thể hiểu được vấn đề :) Chuyển đổi là boolean bắt buộc. Hoặc bạn chỉ định nó hoặc bạn không, và trong một kịch bản bạn có thể chỉ định giá trị của nó. Công tắc hoàn hảo trong mắt tôi. Xem phần đầu ra được cập nhật trong câu trả lời của tôi cho bằng chứng-khái niệm. –

+0

Tập lệnh cần có khả năng được gọi - bất kể các tham số dòng lệnh khác đã có trên phím tắt - và nhắc qua màn hình tham số bắt buộc để có một giá trị đầu vào. Hãy thử tập lệnh của bạn với thông số bắt buộc cho nút chuyển và không nhập giá trị tại dòng lệnh. Bạn sẽ thấy những gì tôi đang nói về. –

Các vấn đề liên quan