Như Christian cho biết điều này có thể được thực hiện thông qua ParameterSetNames. Hãy xem ví dụ sau:
function Get-MySPWeb {
[CmdletBinding(DefaultParameterSetName="set1")]
param (
[parameter(ParameterSetName="set1")] $RelativeUrl,
[parameter(ParameterSetName="set2")] $WebUrl,
[parameter(ParameterSetName="set2", Mandatory=$true)] $DisplayName
)
Write-Host ("Parameter set in action: " + $PSCmdlet.ParameterSetName)
Write-Host ("RelativeUrl: " + $RelativeUrl)
Write-Host ("WebUrl: " + $WebUrl)
Write-Host ("DisplayName: " + $DisplayName)
}
Nếu bạn chạy nó với -RelativeUrl Foo
nó sẽ liên kết với "set1". Nếu bạn gọi hàm này không có tham số, nó cũng sẽ liên kết với "set1".
(Note -khi không có các thông số được cung cấp trong PowerShell v3 (có xem trước tiêu dùng Win8) nó sẽ liên kết với "set1", tuy nhiên nó sẽ báo lỗi ràng buộc trong PowerShell v2 trừ khi bạn thêm [CmdletBinding(DefaultParameterSetName="set1")]
vào khối param Cảm ơn. @ x0n cho mẹo DefaultParameterSetName!)
Nếu bạn cố gắng chạy nó với giá trị tham số từ cả hai bộ, bạn sẽ gặp lỗi.
Nếu bạn chạy nó với -WebUrl Bar
nó sẽ nhắc bạn cho một giá trị tham số cho DisplayName vì nó là một tham số bắt buộc.
Nguồn
2012-05-25 06:02:53
Đây chính là điều tôi cần! Cảm ơn bạn! Chỉ có một điều: khi tôi chạy điều này mà không có tham số, tôi nhận được một lỗi (nhưng tôi muốn nó theo cách này). Một câu hỏi tiếp theo: khi sử dụng các tham số, nó được sử dụng để chuyển đổi với biến $ PSCmdlet.ParameterSetName, phải không? – jumbo
Phải, '$ PSCmdlet.ParameterSetName' có sẵn để bạn có thể thực hiện hành động thích hợp dựa trên bộ tham số được đánh giá bởi quá trình ràng buộc tham số. BTW nó thú vị bạn nhận được một lỗi, có vẻ như đây là một sự khác biệt trong hành vi giữa PSv2 và PSv3. –
Bí quyết để làm cho nó hoạt động như v3 là sử dụng một tham số thiết lập mặc định. Tôi đã chỉnh sửa câu trả lời của bạn để hiển thị điều này. – x0n