[英]How to define a Parameter Set in which no parameter is required(PS cmdlet)?
我想定義三個參數集
我怎樣才能做到這一點?
這就是我當前的代碼。
[Parameter(ParameterSetName = ParameterSet1, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The ResourceGroupName")]
[Parameter(ParameterSetName = ParameterSet2, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The ResourceGroupName")]
[Parameter(ParameterSetName = ParameterSet3, Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The ResourceGroupName")]
public String ResourceGroupName { get; set; }
[Parameter(ParameterSetName = ParameterSet2, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The name of metric alert rule")]
[Parameter(ParameterSetName = ParameterSet3, Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The ResourceGroupName")]
public String Name { get; set; }
我想定義三個參數集
cmdletName -param1
(ParameterSet1)cmdletName -param1 -param2
(ParameterSet2)cmdletName
(此參數沒有任何參數)(ParameterSet3)我怎樣才能做到這一點?
以下是帶有一些調試輸出的可能帶有注釋的 Powershell解決方案:
function cmdletName{
param(
[parameter( Mandatory=$true, ParameterSetName="ParameterSet1",
ValueFromPipelineByPropertyName=$true)]
[parameter( Mandatory=$true, ParameterSetName="ParameterSet2",
ValueFromPipelineByPropertyName=$true)]
### [ValidateNotNullOrEmpty()]
[string]$param1,
[parameter( Mandatory=$true, ParameterSetName="ParameterSet2",
ValueFromPipelineByPropertyName=$true)]
### [ValidateNotNullOrEmpty()]
[string]$param2,
[parameter( Mandatory=$false, ParameterSetName="ParameterSet3",
DontShow, HelpMessage="dummy parameter")]
[string]$AnythingFake='?'
)
process {
Write-Host $PsCmdlet.ParameterSetName -ForegroundColor Yellow
# The following `switch` statement calls a different method
# based on which parameter set the user has specified.
switch ($PsCmdlet.ParameterSetName)
{
"ParameterSet1" { "$param1/*/*"; break}
"ParameterSet2" { "$param1/$param2/*"; break}
"ParameterSet3" { "*/*/$AnythingFake"; break}
Default { throw "impossible"; break}
}
}}
可能的用法示例
# Prepare parameters for pipeline
$par1 = [PSCustomObject]@{param1='p1p'}
$par12 = [PSCustomObject]@{param1='P1P';param2='p2p'}
# Possible valid call # ParameterSetName
cmdletName -param1 "p1" # ParameterSet1
cmdletName -param1 "P1" -param2 "p2" # ParameterSet2
cmdletName # ParameterSet3
$par1 | cmdletName # ParameterSet1
$par12 | cmdletName # ParameterSet2
結果:
ParameterSet1
p1/*/*
ParameterSet2
P1/p2/*
ParameterSet3
*/*/?
ParameterSet1
p1p/*/*
ParameterSet2
P1P/p2p/*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.