gpt4 book ai didi

powershell - 在 Powershell 高级函数上允许额外参数

转载 作者:行者123 更新时间:2023-12-02 23:54:15 25 4
gpt4 key购买 nike

环境说明:我目前的目标是 PowerShell 5.1,因为 6 具有我无法解决的无关限制。

在我正在编写的 Powershell 模块中,有一个主要功能是一堆较小功能的集合。主函数具有较小函数参数的超集。这个想法是调用主函数将调用每个较小的函数,并在主函数上指定必要的参数。例如:

function Main { [CmdletBinding()] param($A,$B,$C,$D)
Sub1 -A $A -B $B
Sub2 -C $C -D $D
}

function Sub1 { [CmdletBinding()] param($A,$B)
"$A $B"
}

function Sub2 { [CmdletBinding()] param($C,$D)
"$C $D"
}

显式指定子函数参数既乏味又容易出错,尤其是像 [switch] 这样的东西。参数。所以我想用 splatting让事情变得更容易。我不会在子函数上指定每个参数,而是直接使用 $PSBoundParameters从父级到每个子功能,如下所示:
function Main { [CmdletBinding()] param($A,$B,$C,$D)
Sub1 @PSBoundParameters
Sub2 @PSBoundParameters
}

这样做的直接问题是子函数开始为它们未定义的任何参数抛出错误,例如“ Sub1 : A parameter cannot be found that matches parameter name 'C'.”如果我删除 [CmdletBinding()]声明,一切正常,但我失去了这些潜艇的所有好处 advanced functions .

所以我目前的解决方法是在每个使用 ValueFromRemainingArguments 的子函数上添加和附加参数参数属性如下:
function Sub1 { [CmdletBinding()] 
param($A,$B,[Parameter(ValueFromRemainingArguments)]$Extra)
"$A $B"
}

function Sub2 { [CmdletBinding()]
param($C,$D,[Parameter(ValueFromRemainingArguments)]$Extra)
"$C $D"
}

从技术上讲,这工作得很好。子功能获得其特定的参数,而附加功能则被忽略。如果我只是为我写这篇文章,我会继续我的生活并完成它。

但是对于一个供公众使用的模块, -Extra 有一个令人烦恼的因素。参数在那里。首先,它显示在 Get-Help输出,这意味着我必须记录它,即使只是说“忽略这个”。

我可以采取额外的步骤来使最终用户有效地看不到该额外参数吗?还是我要解决这一切都错了,有更好的方法来允许在高级功能上使用额外的参数?

最佳答案

我通常的方法是只导出调用模块中的内部(即,不是面向用户的)函数的“包装器”函数。

关于powershell - 在 Powershell 高级函数上允许额外参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49579468/

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