powershell - 如何在 PowerShell 中隐藏 Get-Help 中的参数(不仅仅是制表符完成)?
问题描述
我四处寻找,我找不到“不”的直接答案,但也找不到“是”的直接答案。
我已经知道的:
[Parameter(DontShow)]
仅影响选项卡完成- 一个建议是使用通用参数并测试它是否存在
$PSBoundParameters
- 虽然在技术上可行,但这具有没有我想要的名称的副作用。 - 另一个建议是将它作为别名隐藏在另一个参数中,但这更适合弃用。
我的场景是有一个参数不应该被任何第 3 方使用,但被伴随脚本使用
例子:
[CmdletBinding(SupportsShouldProcess)]param(
[switch]$VisibleSwitch,
[switch]$HiddenSwitch ### This switch should not be visible to human-beings.
)
#...
if( $HiddenSwitch) {
#do something
return
}
#...
解决方案
我担心从 PowerShell 7.2 开始没有好的解决方案,但是您想要的最接近的近似值可能如下:
定义一个代理参数,其名称表明它不能直接使用。
DontShow
使用和ValueFromRemainingArguments
[Parameter()]
属性声明此参数。手动检查绑定到代理参数的参数以查找“隐藏”参数。
[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
}
笔记:
这不会阻止代理参数出现在语法图中(例如 with
-?
) - 它会显示为[-(ignore) <Object>]
- 但它不会显示真正的参数名称。- GitHub 问题 #7868要求在不再显示过时(弃用)参数的情况下,以官方方式从语法图中隐藏参数。
严格来说,您还必须检查
${(ignore)}
允许显式将布尔值传递给开关的(很少使用的)语法(例如,-HiddenSwitch:$true
),但为了简洁起见,我在上面的代码中省略了它。类似地,需要更多的工作来支持传递隐藏参数名称的明确前缀(例如,
-Hidden
)。
如果在语法图中没有显示额外的参数是最重要的,那么 - 也是次优的 - 替代方法是使用具有晦涩名称的“私有”变量,例如$__HiddenSwitch
,调用者必须设置它才能模拟-HiddenSwitch
参数,并且被调用者(您的脚本/函数)在检查后将其删除。
请注意,如果被调用者是在模块中定义的,则需要额外的努力才能访问调用者的范围。
推荐阅读
- json - 在 Jmeter 中使用带有 != 条件的 JsonPath 从 JSON 中提取一些值
- forms - 使用数据库的 Laravel 搜索表单
- r - 在 r 中读取多个 *.rtf 文件
- android - ListView 滚动条样式在小部件中无法正常工作
- python - 熊猫读取具有不同列数的多个表
- ionic-framework - 在变量中导入 ionic3 字体
- batch-file - 如何使用 rsync 而不是批量移入 for 循环
- python - 如何在 Python 中加载 JPEG XR 图像文件
- javascript - 如何改进我的 JavaScript 代码
- java - PageFactory 的存储元素