【问题标题】:Pass a parameter into a function and use it to reference a property将参数传递给函数并使用它来引用属性
【发布时间】:2018-05-30 19:21:54
【问题描述】:

是否可以将参数传递给函数并以某种方式使用它来引用对象的属性:

例如(似乎不起作用):

function Some-Function ($objectarray, $parameter)
{
    $result = $objectarray | ?{$_.$parameter -eq $true}
}

这似乎适用于例如:

function Some-Function ($objectarray, $parameter)
{
    $result = $objectarray | Select Name, $parameter
}

谢谢

【问题讨论】:

    标签: function powershell parameters


    【解决方案1】:

    您可以通过名称访问对象属性。你快到了,你只需要返回结果让它工作,例如:

    function Some-Function ($objectarray, $parameter)
    {
       $objectarray | ?{$_.$parameter -eq $false}
    }
    
    Some-Function (Get-Process) Responding
    

    【讨论】:

    • 谢谢。当我返回单个对象时,问题似乎出在使用 .Count 上,现在才注意到。
    • 事实上你并没有返回一个对象。你只是在捕捉结果。
    【解决方案2】:

    Reza Aghaei's helpful answer 提出了重要的一点:您的原始函数缺少 output-generating 语句。

    此外,在 PSv3+ 中,您可以使用 比较语句隐式 布尔逻辑来简化函数:

    function Some-Function ($objectarray, $property) {
      # short for: ? { $_.$property } or ? { $_.$property -eq $true }
      $objectArray | ? $property
    }
    

    在评论中你说:

    问题在于当我返回单个对象时使用 .Count

    这应该只是 PSv2 中的问题。
    PSv3+ 中,任何 值,无论是标量还是集合 - 甚至是 $null - 都应该具有 .Count 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      相关资源
      最近更新 更多