我四处搜寻,找不到“否”的直接答案,但也没有找到“是”的直接答案。
我已经知道的:
-
[Parameter(DontShow)]
只影响制表符完成
-
一个建议是使用通用参数并测试它是否存在于
$PSBoundParameters
- 虽然技术上可行,但它的副作用是没有我想要的名称。
- 另一个建议是将其作为别名隐藏在另一个参数中,但这更适合弃用。
我遇到的情况是有一个参数不应被任何第 3 方使用,但由配套脚本使用
example:
[CmdletBinding(SupportsShouldProcess)]param(
[switch]$VisibleSwitch,
[switch]$HiddenSwitch ### This switch should not be visible to human-beings.
)
#...
if( $HiddenSwitch) {
#do something
return
}
#...
我担心有没有好的解决办法从 PowerShell 7.2 开始,但是最接近的近似值你想要的可能如下:
[CmdletBinding(SupportsShouldProcess)]
param(
[switch] $Switch
,
[Parameter(DontShow, ValueFromRemainingArguments)]
${(ignore)}
)
# Examine the quasi-hidden parameter value
# for containing the switch name of interest.
$HiddenSwitch = ${(ignore)}.Count -eq 1 -and ${(ignore)}[0] -eq '-HiddenSwitch'
# Make sure that no unexpected arguments were passed.
if (-not $HiddenSwitch -and ${(ignore)}.Count -gt 0) { throw "Unexpected arguments specified: ${(ignore)}"}
# Output what switches were passed.
[pscustomobject] @{
'-Switch' = $Switch
'-HiddenSwitch' = $HiddenSwitch
}
Note:
-
这不会阻止代理参数显示在语法图中(例如,使用-?
) - 它将显示为[-(ignore) <Object>]
- 但它不会透露真实的参数名称。
-
GitHub 问题 #7868要求提供一种官方方法来隐藏语法图中的参数,在不再显示的情况下obsolete(已弃用)参数。
-
严格来说,您还必须检查${(ignore)}
对于允许显式传递一个(很少使用)的语法Boolean到开关(例如,-HiddenSwitch:$true
),但为了简洁起见,我在上面的代码中省略了它。
-
同样,需要更多的工作来支持通过明确的prefix隐藏参数名称的(例如,-Hidden
).
如果语法图中没有出现额外的参数是最重要的,一个 - 也是次优的 - 替代方案是使用名称晦涩的“私有”变量,例如$__HiddenSwitch
,调用者必须设置它才能模拟-HiddenSwitch
参数,以及被调用者(您的脚本/函数)在检查后将其删除。
请注意,如果被调用者定义在module,需要付出额外的努力来访问调用者的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)