gpt4 book ai didi

powershell - 组合参数集

转载 作者:行者123 更新时间:2023-12-03 00:59:02 24 4
gpt4 key购买 nike

这与我之前问过的一个问题有关。 Group parameter (set?) requiring one of the parameters

我有一组5个参数;年,月,日,路径,输入。我正在寻求组合参数集,以便可以进行以下组合:

年和(路径或输入)
月&(路径或输入)
天数(路径或输入)

Path是类型化路径,而Input是指向文件的指针,无论哪种方式,都需要其中之一。

我试过了

    [Parameter(Mandatory = $true, ParameterSetName = 'Path')]
[Parameter(Mandatory = $true, ParameterSetName = 'Input')
[int]$Years = '7'

但是,如果使用Years,则需要输入Path&Input
Param (
[parameter(Position = 0, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
[string[]]$Filter = '*.*',
[Parameter(Mandatory = $True, ParameterSetName = 'ByYears')]
[int]$Years = '7',
[Parameter(Mandatory = $True, ParameterSetName = 'ByMonths')]
[int]$Months,
[Parameter(Mandatory = $True, ParameterSetName = 'ByDay')]
[int]$Days,
[Parameter(Mandatory = $true, ParameterSetName = 'Path')]
[string[]]$Path,
[Parameter(Mandatory = $true, ParameterSetName = 'Input')]
[string]$Input,
[switch]$Recurse,
[Parameter(Mandatory = $true)]
[string]$ReportPath = $PWD
)

最后,我希望仅使用以下一种组合;

-2年-路径C:\ Temp
-2年-输入C:\ Temp \ file.txt
-第2个月-路径C:\ Temp
-第二个月-输入C:\ Temp \ file.txt
-第2天-路径C:\ Temp
-第2天-输入C:\ Temp \ file.txt

最佳答案

无法在ParameterSets中直接表达ParameterA and (ParameterB or ParameterC),但是您可以创建两个ParameterSets:ParameterA and ParameterBParameterA and ParameterC,它们具有相同的作用。

如果将其扩展到您的方案,则需要6个ParameterSet:

  • YearsAndPath
  • YearsAndInput
  • MonthsAndPath
  • MonthsAndInput
  • DaysAndPath
  • DaysAndInput

  • 然后,只需用需要使用的ParameterSet标记每个参数,您的 param块将变为:
    function Invoke-Params
    {

    param(
    [parameter(Position = 0, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
    [string[]]$Filter = '*.*',

    [Parameter(Mandatory = $True, ParameterSetName = 'YearsAndPath')]
    [Parameter(Mandatory = $True, ParameterSetName = 'YearsAndInput')]
    [int]$Years = '7',

    [Parameter(Mandatory = $True, ParameterSetName = 'MonthsAndPath')]
    [Parameter(Mandatory = $True, ParameterSetName = 'MonthsAndInput')]
    [int]$Months,

    [Parameter(Mandatory = $True, ParameterSetName = 'DaysAndPath')]
    [Parameter(Mandatory = $True, ParameterSetName = 'DaysAndInput')]
    [int]$Days,

    [Parameter(Mandatory = $true, ParameterSetName = 'YearsAndPath')]
    [Parameter(Mandatory = $true, ParameterSetName = 'MonthsAndPath')]
    [Parameter(Mandatory = $true, ParameterSetName = 'DaysAndPath')]
    [string[]]$Path,

    [Parameter(Mandatory = $true, ParameterSetName = 'YearsAndInput')]
    [Parameter(Mandatory = $true, ParameterSetName = 'MonthsAndInput')]
    [Parameter(Mandatory = $true, ParameterSetName = 'DaysAndInput')]
    [string]$Input,

    [switch]$Recurse,
    [Parameter(Mandatory = $true)]
    [string]$ReportPath = $PWD
    )

    }

    然后以下工作正常:
    PS> Invoke-Params -Years 5 -Path "xxx"
    PS> Invoke-Params -Years 5 -Input "xxx"

    这些抛出异常:
    PS> Invoke-Params -Years 5
    Invoke-Params : Parameter set cannot be resolved using the specified named parameters.
    At line:1 char:1
    + Invoke-Params -Years 5
    + ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Invoke-Params], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Invoke-Params

    PS> Invoke-Params -Years 5 -Path "aaa" -Input "bbb"
    Invoke-Params : Parameter set cannot be resolved using the specified named parameters.
    At line:1 char:1
    + Invoke-Params -Years 5 -Path "aaa" -Input "bbb"
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Invoke-Params], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Invoke-Params

    关于powershell - 组合参数集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772259/

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