2011-08-29 23 views
7

Tôi khá chắc chắn rằng tôi không có bất kỳ tùy chọn nào khác ngoài những gì tôi đã phát hiện, nhưng tôi muốn chọn bộ não internet tập thể.Cách đánh dấu tham số chuyển đổi là bắt buộc trong Powershell

Tôi muốn sử dụng thông số [switch] khi chuyển các giá trị boolean cho các chức năng tùy chỉnh. Tuy nhiên, tôi có một vài trường hợp mà tôi muốn đánh dấu tham số chuyển đổi là bắt buộc. Tùy chọn này có thể được thực hiện theo thông số [tham số (Bắt buộc = $ true)] trên tham số. Tuy nhiên, tôi thực sự không thích dấu nhắc giao diện người dùng xuất hiện. Tôi thích ném một ngoại lệ.

Nhưng, một chuyển đổi có thể là đúng hoặc sai và thuộc tính "IsPresent" không phân biệt. Nếu tôi chuyển thông số chuyển đổi là -example: $ false, chuyển đổi báo cáo rằng $ example.IsPresent là false!

Tôi đã sử dụng [bool]. Ví dụ:

param 
(
    [bool]$theValue = $(throw('You didn't specify the value!')) 
); 

Có thủ thuật nào khác tôi có thể kéo không?

+0

Tại sao không có hai công tắc? 'example' và' exampleOff'. Sau đó, khi không có 'IsPresent' ném một lỗi. – jpaugh

Trả lời

17

Theo cách nào, thông số switch luôn bắt buộc. Nếu bạn không chỉ định nó, nó sẽ có giá trị sai. Nếu bạn chỉ định nó (-var), nó sẽ nhận giá trị đúng và nếu bạn chỉ định giá trị quá (-var:$false), nó sẽ nhận giá trị được chỉ định.

Tôi thực sự không thể nghĩ ra tình huống bắt buộc phải chỉ định công tắc. Nếu bạn không chỉ định, nó là sai. Đơn giản như thế.

Tôi nghĩ điều bạn muốn là đề cập cụ thể giá trị của thông số là đúng hoặc sai? Nếu đúng như vậy, phiên bản bool mà bạn đề cập là những gì tôi sẽ đi cho, mặc dù nó hoạt động theo cách tương tự với switch quá:

param([switch]$a = $(throw "You didn't specify the value")) 

Và cũng liên quan đến $example.IsPresent - Tôi biết nó không phải là trực quan/tấm, nhưng nó giống với giá trị của biến chuyển đổi. Đó là cách các nhà xây dựng cho Switch Paramater được xác định và các tài sản duy nhất mà nó có là IsPresent:

Tạo một đối tượng SwitchParameter mới bao gồm một giá trị Boolean xác định liệu các switch có mặt.

http://msdn.microsoft.com/en-us/library/system.management.automation.switchparameter.ctor%28v=vs.85%29.aspx

+0

Nếu thông báo ngoại lệ là những gì làm phiền bạn, đây là điều tốt nhất bạn sẽ nhận được. –

+1

Rất tiếc! Tôi đã kết luận không chính xác rằng việc ném lỗi khi sử dụng "Chuyển đổi" trong danh sách tham số sẽ không hoạt động. Tôi đã thử điều này một lần nữa, và nó có vẻ tốt để đi. câu trả lời của manojlds vừa chính xác vừa rất chi tiết. –

+0

-var: $ false là những gì tôi đang tìm kiếm. Cảm ơn! –

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