【问题标题】:Is it possible to combine a parameter list across functions?是否可以跨函数组合参数列表?
【发布时间】:2017-01-10 11:57:11
【问题描述】:

我有一个 Powershell 脚本,其中包含 2 个参数非常相似的函数。 是否可以将参数(计算机名、端口、其他变量)组合成某种集合?

在这个例子中,它只有 3 个参数,但实际上它是 11 个参数。 我正在考虑这样做,因为参数列表开始变得有点长。

function Function1 
{
  Param(
    [Parameter()]
    [String]$Filename,
    [Parameter()]
    [String]$Computername,
    [Parameter()]
    [String]$Port,
    [Parameter()]
    [String]$OtherVariable
    )
  Process
  {

  }
}

function Function2
{
  Param(
    [Parameter()]
    [String]$Url,
    [Parameter()]
    [String]$Computername,
    [Parameter()]
    [String]$Port,
    [Parameter()]
    [String]$OtherVariable
    )
  Process
  {

  }
}

【问题讨论】:

  • 它叫parameter setsConditional powershell parameters
  • 我已经尝试过查看parameter sets,但我认为它不能跨功能工作。你有一个例子吗?还是说我应该结合功能使用parameter sets
  • 当然是后者。您可以创建一个超级函数,根据参数调用现有函数之一。
  • 虽然我想有一个跨函数使用 parameter sets 的选项(主要是因为一个函数名为 Export-MyObjects 而另一个函数名为 Compile-MyObjects),但我相信您的建议是我会得到的最佳答案。你能留下答案吗?

标签: powershell


【解决方案1】:

你有几个选择:

  1. 不声明您的参数。但是您会失去任何自动帮助,这将使其难以维护(除非您添加了 cmets,详细说明了预期/接受的参数 - 但这仍然需要维护)。
  2. 将两个函数共有的代码移到第三个函数中(不确定这在您的用例中是否可行?)
  3. 创建一个超级* 函数,正如 woxxom 在您的帖子评论中提到的那样,使用所有参数加上编译和导出 [switch] 参数。然后将编译和导出代码移动到单独的函数中,或者包含在超级函数中。

*super 是超集

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2015-10-10
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多