使用两个或多个参数时出现Powershell ParameterSet错误

时间:2016-04-29 19:23:28

标签: powershell

我有一个脚本打印出日志信息,基本上是文本。该脚本有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个或更多参数时使用的其他参数集?或者更好的方法呢?

1 个答案:

答案 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"