0

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

多値であるべきですよね?

4

1 に答える 1