下午好
不幸的是,PowerShell无法通过参数类型检测ParameterSet,例如:如果将第二个参数作为Int传递,则选择ParameterSet1,否则使用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 '…') { … }
}
…
}
非常感谢您的帮助和帮助!
托马斯
答案 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'