gpt4 book ai didi

powershell - 具有多个ParameterSetName的函数中的AmbiguousParameterSet

转载 作者:行者123 更新时间:2023-12-03 00:17:15 25 4
gpt4 key购买 nike

我正在写一个函数,根据条件选择给定路径下的文件。

这些是我的输入参数:

  • $ Path:必需的字符串
  • $ OwnedBy:可选,字符串
  • $ NotOwnedBy:可选,字符串
  • $ BiggerThan:可选,int
  • $ SmallerThan:可选,int

  • 我想让我的函数接受多个过滤器参数,但要避免这些冲突,以便函数一起拒绝$ OwnedBy和$ NotOwnedBy或$ BiggerThan和$ SmallerThan。可能的组合应为:
  • 我的功能-Path [string]
  • 我的功能-Path [string] -OwnedBy [string]
  • 我的功能-Path [string] -NotOwnedBy [string]
  • 我的功能-Path [string] -BiggerThan [int]
  • 我的功能-Path [string] -SmallerThan [int]
  • 我的功能-Path [string] -OwnedBy [string] -BiggerThan [int]
  • 我的功能-Path [string] -OwnedBy [string] -SmallerThan [int]
  • 我的功能-Path [string] -NotOwnedBy [string] -BiggerThan [int]
  • 我的功能-Path [string] -NotOwnedBy [string] -SmallerThan [int]

  • 我为上述每个组合使用ParameterNameSet
    [CmdletBinding(DefaultParametersetName="Set1")]
    Param(
    [Parameter(Position=0,Mandatory=$true)]
    [String] $Path,

    [Parameter(ParameterSetName="Set2")]
    [Parameter(ParameterSetName="Set6")]
    [Parameter(ParameterSetName="Set7")]
    [String] $OwnedBy,

    [Parameter(ParameterSetName="Set3")]
    [Parameter(ParameterSetName="Set8")]
    [Parameter(ParameterSetName="Set9")]
    [String] $NotOwnedBy,

    [Parameter(ParameterSetName="Set4")]
    [Parameter(ParameterSetName="Set6")]
    [Parameter(ParameterSetName="Set8")]
    [String] $BiggerThan,

    [Parameter(ParameterSetName="Set5")]
    [Parameter(ParameterSetName="Set7")]
    [Parameter(ParameterSetName="Set9")]
    [String] $SmallerThan
    )

    但只有在第1点那样完成通话后,此功能才有效。
    所有其他方式给我这样的错误:
    My-Function : Parameter set cannot be resolved using the specified named parameters.
    At line:1 char:3
    + My-Function <<<< aaa -OwnedBy sss
    + CategoryInfo : InvalidArgument: (:) [My-Function], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,My-Function

    最佳答案

    正如Ansgar所说,您有重叠的子集。无需重新考虑策略即可解决此问题的最简单方法是保留当前参数集并使所有参数变为强制性(这需要版本3.0+):

    function Test {
    [CmdletBinding(DefaultParametersetName="Set1")]
    Param(
    [Parameter(Position=0,Mandatory=$true)]
    [String] $Path,

    [Parameter(ParameterSetName="Set2",Mandatory=$true)]
    [Parameter(ParameterSetName="Set6",Mandatory=$true)]
    [Parameter(ParameterSetName="Set7",Mandatory=$true)]
    [String] $OwnedBy,

    [Parameter(ParameterSetName="Set3",Mandatory=$true)]
    [Parameter(ParameterSetName="Set8",Mandatory=$true)]
    [Parameter(ParameterSetName="Set9",Mandatory=$true)]
    [String] $NotOwnedBy,

    [Parameter(ParameterSetName="Set4",Mandatory=$true)]
    [Parameter(ParameterSetName="Set6",Mandatory=$true)]
    [Parameter(ParameterSetName="Set8",Mandatory=$true)]
    [String] $BiggerThan,

    [Parameter(ParameterSetName="Set5",Mandatory=$true)]
    [Parameter(ParameterSetName="Set7",Mandatory=$true)]
    [Parameter(ParameterSetName="Set9",Mandatory=$true)]
    [String] $SmallerThan
    )

    }

    您基本上通过严格定义集合来自己实现可选性。

    关于powershell - 具有多个ParameterSetName的函数中的AmbiguousParameterSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31750263/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com