Powershell - Where子句出乎意料的行为?

时间:2012-11-15 16:18:30

标签: powershell powershell-v2.0 where-clause

我有一个复杂的脚本来评估来自Web服务的“属性”。 我在名为 $ global:attributes 的列表中构建了所有属性和信息的列表,并确定它们是单值/多值还是引用。

以下是一个片段:

#Build the object
$obj = new-object object
$obj | Add-Member -MemberType NoteProperty -Name AttributeName -Value "Applications"
$obj | Add-Member -MemberType NoteProperty -Name IsReference -Value $true
$obj | Add-Member -MemberType NoteProperty -Name IsMultiValued -Value $true
$global:attributes = $obj

现在以下命令会返回“true”吗?

(($global:attributes | where { $_.AttributeName -eq "Applications" }).IsReference -eq $true)
(($global:attributes | where { $_.AttributeName -eq "Applications" }).IsMultiValued -eq $true)

那么为什么下面给出的函数没有按预期进行评估?是因为我在嵌套的if语句中调用where子句吗?

Function doTest($key)
{
    if (($global:attributes | where { $_.AttributeName -eq $key}).IsReference -eq $true)
    {
        write-host "$key is of type Reference"
        if (($global:attributes | where { $_.AttributeName -eq $key}).IsMulitValued -eq $true)
        {
            write-host "$key is multivalued"
        }
        else {
            write-host "$key is single value"
        }
    } else {
        if (($global:attributes | where { $_.AttributeName -eq $key}).IsMultiValued -eq $true)
        {
            write-host "$key is Multivalue other"
        } else {
            write-host "$key is single value other"
        }
    }
}

此命令 doTest -key "Applications"返回

Applications is of type Reference
Applications is single value

应该是多值的,对吧?

1 个答案:

答案 0 :(得分:0)

上面的代码中有一个拼写错误...“IsMulitValued”而不是“IsMultiValued”。当我改变并在本地运行它时,它产生了你预期的输出。