PowerShell:DynamicParam:获取传递参数的列表?

时间:2018-11-17 15:31:26

标签: powershell dynamicparameters

下午好

不幸的是,PowerShell无法通过参数类型检测ParameterSet,例如:如果将第二个参数作为Int传递,则选择Para​​meterSet1,否则使用ParameterSet2。

因此,我想手动检测传递的Parameter-Combinations。
是否可以在DynamicParam中获取传递的参数列表,就像这样?

Function Log {
    [CmdletBinding()]
    Param ()
    DynamicParam {
        # Is is possible to access the passed Parameters?,
        # something like that:
        If (Args[0].ParameterName -eq 'Message') { … }

        # Or like this:
        If (Args[0].Value -eq '…') { … }
    }
    …
}

非常感谢您的帮助和帮助!
托马斯

1 个答案:

答案 0 :(得分:0)

此最初发现是错误的!: “我发现了魔力,通过使用$PSBoundParameters,我们可以访问传递的参数。”

这是正确但非常令人失望的答案:
这非常令人讨厌且令人难以置信,但是看起来PowerShell并未传递有关动态传递的参数的任何信息。

以下示例使用了此处定义的New-DynamicParameter函数: Can I make a parameter set depend on the value of another parameter?

Function Test-DynamicParam {
    [CmdletBinding()]
    Param (
        [string]$FixArg
    )
    DynamicParam {
        # The content of $PSBoundParameters is just 
        # able to show the Params declared in Param():
        # Key     Value
        # ---     -----
        # FixArg  Hello

        # Add the DynamicParameter str1:
        New-DynamicParameter -Name 'DynArg' -Type 'string' -HelpMessage 'DynArg help'

        # Here, the content of $PSBoundParameters has not been adjusted:
        # Key     Value
        # ---     -----
        # FixArg  Hello
    }
    Begin {
        # Finally - but too late to dynamically react! -
        # $PSBoundParameters knows all Parameters (as expected):
        # Key     Value
        # ---     -----
        # FixArg  Hello
        # DynArg  World
    }
    Process {
        …
    }
}

# Pass a fixed and dynamic parameter
Test-DynamicParam -FixArg 'Hello' -DynArg 'World'