我有一个脚本打印出日志信息,基本上是文本。该脚本有3个参数:' ID'' Text'和' Day',我可以根据这些参数过滤信息。它是这样的:
function Get-Log{
[CmdletBinding(DefaultParameterSetName="All")]
Param(
[Parameter(
ParameterSetName="ByID"
)]
[Int]$ID,
[Parameter(
ParameterSetName="ByText"
)]
[String]$Text,
[Parameter(
ParameterSetName="ByDay"
)]
[String]$Day
)
...
}
如果我调用没有或只有一个参数的函数,它可以正常工作,例如:
Get-Log
Get-Log -Text "sample"
但是当我使用两个或更多参数时,例如:
Get-Log -Text "sample" -Day "29/04/2016"
它溢出参数设置错误:
Get-Log : Parameter set cannot be resolved using the specified named parameters
+ get-log -Text "sample" -Day "29/04/2016"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-Change], ParameterBind
ingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Get-Change
有没有办法指定在指定2个或更多参数时使用的其他参数集?或者更好的方法呢?
答案 0 :(得分:0)
我使用参数集的方法是定义脚本的一个“模式”以及“模式”所具有的参数。
例如,RunOnce参数集有两个必需参数,服务器和日期。
[Parameter(Mandatory=$false,ParameterSetName="RunOnce",
HelpMessage="Enter ServerName to schedule reboot for.")]
[switch]$RunOnce,
[Parameter(Mandatory=$true,ParameterSetName="RunOnce")]
[string]$server,
[Parameter(Mandatory=$true,ParameterSetName="RunOnce")]
[string]$date,
用作Function -RunOnce -Server "blah" -Date "04/29/2016 18:20"