gpt4 book ai didi

powershell - 如何在 PowerShell 中隐藏 Get-Help 中的参数(不仅仅是制表符完成)?

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

我找遍了,我找不到“不”的直接答案,也找不到"is"的直接答案。

我已经知道的:

  • [Parameter(DontShow)]只影响tab补全
  • One suggestion是使用通用参数并测试它在 $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()] 属性。

  • 手动检查绑定(bind)到代理参数的参数以查找“隐藏”参数。

[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
}

注意:

  • 这不会阻止代理参数出现在语法图中(例如,使用 -? ) - 它将显示为 [-(ignore) <Object>] - 但它不会显示真正的参数名称。

    • GitHub issue #7868在不再显示过时(已弃用)参数的情况下,寻求一种官方方法来隐藏语法图中的参数。
  • 严格来说,您还必须检查 ${(ignore)}对于允许将 Boolean 显式传递给开关的(很少使用的)语法(例如 -HiddenSwitch:$true ),但为了简洁起见,我在上面的代码中省略了它。

  • 同样,需要更多的工作来支持传递隐藏参数名称的明确前缀(例如,-Hidden)。


如果在语法图中不显示额外参数是最重要的,那么 - 也是次优的 - 替代方法是使用名称晦涩的“私有(private)”变量,例如 $__HiddenSwitch ,调用者必须设置它才能模拟 -HiddenSwitch参数,并且被调用者(您的脚本/函数)在检查后将其删除。

请注意,如果被调用者是在模块中定义的,则需要额外的努力才能访问调用者的范围。

关于powershell - 如何在 PowerShell 中隐藏 Get-Help 中的参数(不仅仅是制表符完成)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67640240/

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