共用方式為


對於 Azure 資源編寫陣列屬性的原則

Azure Resource Manager 屬性通常會定義為字串和布林值。 存在一對多關聯性時,複雜屬性會改為定義為陣列。 在 Azure 原則中,能夠以多種不同的方式使用陣列:

  • 定義參數的類型,可提供多個選項
  • 使用條件 innotIn原則規則一部分
  • 計算滿足條件的陣列成員數目,其原則規則的一部分
  • appendmodify 效果下,更新現有的陣列

本文涵蓋 Azure 原則的每個使用方式,並提供數個範例定義。

參數陣列

定義參數陣列

將參數定義為陣列,可在需要一個以上的值時,允許原則彈性。 此原則定義允許 allowedLocations 參數的任何單一位置,並預設為 eastus2

"parameters": {
    "allowedLocations": {
        "type": "string",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": "eastus2"
    }
}

由於類型字串,因此指派原則時只能設定一個值。 如果指派此原則,則範圍內的資源只能在單一 Azure 區域中使用。 大部分的原則定義都必須允許已核准的選項清單,例如允許 eastus2eastuswestus2

若要建立原則定義以允許多個選項,請使用 [陣列]類型。 相同的原則可以改寫如下:

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": [
            "eastus2"
        ],
        "allowedValues": [
            "eastus2",
            "eastus",
            "westus2"
        ]

    }
}

注意

一旦儲存原則定義之後,就無法變更參數上的類型屬性。

這個新的參數定義會在原則指派期間接受一個以上的值。 陣列屬性 allowedValues 定義完畢後,指派期間可用的值會進一步限制為預先定義的選項清單。 使用 allowedValues 為選擇性。

於指派期間將值傳遞給參數陣列

透過 Azure 入口網站指派原則時,類型的參數 array 會顯示為單一文字方塊。 提示顯示「請使用 ; 來分隔值。 (例如倫敦;紐約)」。 若要將 eastus2eastuswestus2 允許的位置值傳遞給參數,請使用下列字串:

eastus2;eastus;westus2

使用 Azure CLI、Azure PowerShell 或 REST API 時,參數值的格式會不同。 這些值會透過同時包含參數名稱的 JSON 字串傳遞。

{
    "allowedLocations": {
        "value": [
            "eastus2",
            "eastus",
            "westus2"
        ]
    }
}

若要將此字串與每個 SDK 搭配使用,請使用下列命令:

在條件中使用陣列

In 和 notIn

innotIn 條件只適用於陣列值。 它們會檢查陣列中是否有值。 陣列可以是常值 JSON 陣列或陣列參數的參考。 例如:

{
      "field": "tags.environment",
      "in": [ "dev", "test" ]
}
{
      "field": "location",
      "notIn": "[parameters('allowedLocations')]"
}

值計數

值計數運算式會計算有多少陣列成員符合條件。 該運算式所提供的方式可使用每個反覆項目上的不同值,來多次運算相同條件。 例如,下列條件會檢查資源名稱是否符合來自模式陣列的任何模式:

{
    "count": {
        "value": [ "test*", "dev*", "prod*" ],
        "name": "pattern",
        "where": {
            "field": "name",
            "like": "[current('pattern')]"
        }
    },
    "greater": 0
}

為了評估運算式,Azure 原則會評估 where 條件三次,每個 [ "test*", "dev*", "prod*" ] 成員皆須評估一次,以計算其得出 true 的次數。 在每個反覆項目上,目前陣列成員的值會按照 count.name 所定義的 pattern 索引名稱配對。 接著,您可以呼叫特殊的範本函式,在 where 條件內參考此值:current('pattern')

反覆運算 current('pattern') 傳回值
1 "test*"
2 "dev*"
3 "prod*"

只有在結果計數大於 0 時,條件才為 true。

若要讓上述條件更泛型,請使用參數參考,而非常值陣列:

{
    "count": {
        "value": "[parameters('patterns')]",
        "name": "pattern",
        "where": {
            "field": "name",
            "like": "[current('pattern')]"
        }
    },
    "greater": 0
}

值計數運算式不在任何其他計數運算式底下時,count.name 是選擇性且可在沒有任何引數的情況下使用 current() 函式:

{
    "count": {
        "value": "[parameters('patterns')]",
        "where": {
            "field": "name",
            "like": "[current()]"
        }
    },
    "greater": 0
}

值計數也支援複雜物件的陣列,且允許更複雜的條件。 例如,下列條件會為每個名稱模式定義所需的標籤值,並檢查資源名稱是否符合該模式,但沒有必要的標籤值:

{
    "count": {
        "value": [
            { "pattern": "test*", "envTag": "dev" },
            { "pattern": "dev*", "envTag": "dev" },
            { "pattern": "prod*", "envTag": "prod" },
        ],
        "name": "namePatternRequiredTag",
        "where": {
            "allOf": [
                {
                    "field": "name",
                    "like": "[current('namePatternRequiredTag').pattern]"
                },
                {
                    "field": "tags.env",
                    "notEquals": "[current('namePatternRequiredTag').envTag]"
                }
            ]
        }
    },
    "greater": 0
}

如需實用範例,請參閱值計數範例

參考陣列資源屬性

許多使用案例都需要在評估的資源中使用陣列屬性。 某些案例需要參考整個陣列 (例如檢查其長度)。 其他案例則需要將條件套用至各個別陣列成員 (例如,確保所有防火牆規則都會封鎖來自網際網路的存取)。 了解 Azure 原則參考資源屬性的不同方式,以及這些參考在參考陣列屬性時的行為,是撰寫涵蓋這些案例條件的關鍵。

參考資源屬性

Azure 原則可以使用別名參考資源屬性。您可以透過兩種方式參考 Azure 原則內的資源屬性值:

  • 使用 [欄位] 條件來檢查所有指定的資源屬性是否符合條件。 範例:

    {
      "field" : "Microsoft.Test/resourceType/property",
      "equals": "value"
    }
    
  • 使用 field() 函式來存取屬性值。 範例:

    {
      "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]",
      "equals": "prefix_"
    }
    

欄位條件隱含「全部」行為。 如果別名代表值的集合,則會檢查所有個別值是否符合條件。 field() 函式會依原狀傳回別名所代表的值,然後其他範本函式即可操作。

參考陣列欄位

陣列資源屬性是以兩種不同類型的別名來表示。 已附加 [*] 的「正常」別名和陣列別名

  • Microsoft.Test/resourceType/stringArray
  • Microsoft.Test/resourceType/stringArray[*]

參考陣列

第一個別名代表單一值,也就是要求內容中的 stringArray 屬性值。 因為該屬性的值是陣列,所以在原則條件中並不實用。 例如:

{
  "field": "Microsoft.Test/resourceType/stringArray",
  "equals": "..."
}

此條件會將整個 stringArray 陣列與單一字串值進行比較。 包括 equals 在內的大部分條件都只接受字串值,因此在比較陣列與字串時功用不大。 檢查陣列屬性是否存在時,便是參考陣列屬性的主要實用案例:

{
  "field": "Microsoft.Test/resourceType/stringArray",
  "exists": "true"
}

使用 field() 函式時,傳回的值是來自要求內容的陣列,然後您就可以將其與任何接受陣列引數的支援範本函式搭配使用。 例如,下列條件會檢查 stringArray 的長度是否大於 0:

{
  "value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
  "greater": 0
}

參考陣列成員集合

使用 [*] 語法的別名代表從陣列屬性選取的屬性值集合,這與選取陣列屬性本身不同。 在 Microsoft.Test/resourceType/stringArray[*] 的案例中,系統會傳回具所有 stringArray 成員的集合。 如先前所述,field 條件會檢查所有選取的資源屬性是否符合條件,因此只有在所有stringArray 成員都等於「value」時,下列條件才為 true。

{
  "field": "Microsoft.Test/resourceType/stringArray[*]",
  "equals": "value"
}

如果陣列是空的,則條件會評估為 true,因為陣列中沒有任何成員違規。 在此案例中,建議改用 count 運算式。 如果陣列包含物件,可以使用 [*] 別名從每個陣列成員中選取特定屬性值。 範例:

{
  "field": "Microsoft.Test/resourceType/objectArray[*].property",
  "equals": "value"
}

如果 objectArray 中所有 property 屬性的值都等於 "value",則此條件為 true。 如需更多範例,請參閱其他 [*] 別名範例

使用 field() 函式來參考陣列別名時,傳回的值是所有選取值的陣列。 此行為表示 field() 函式的常見使用案例 (即將範本函式套用至資源屬性值的能力) 有限。 此案例中只可使用接受陣列引數的範本函式。 例如,可以透過 [length(field('Microsoft.Test/resourceType/objectArray[*].property'))] 取得陣列長度。 不過,將範本函式套用至各陣列成員,並將其與所需值進行比較等更複雜的案例,只有在使用 count 運算式時才可執行。 如需詳細資訊,請參閱欄位計數運算式

總而言之,請參閱下列範例資源內容,以及各種別名所傳回的選取值:

{
  "tags": {
    "env": "prod"
  },
  "properties":
  {
    "stringArray": [ "a", "b", "c" ],
    "objectArray": [
      {
        "property": "value1",
        "nestedArray": [ 1, 2 ]
      },
      {
        "property": "value2",
        "nestedArray": [ 3, 4 ]
      }
    ]
  }
}

在範例資源內容上使用欄位條件時,結果如下所示:

Alias 選取的值
Microsoft.Test/resourceType/missingArray null
Microsoft.Test/resourceType/missingArray[*] 值的空集合。
Microsoft.Test/resourceType/missingArray[*].property 值的空集合。
Microsoft.Test/resourceType/stringArray ["a", "b", "c"]
Microsoft.Test/resourceType/stringArray[*] "a""b""c"
Microsoft.Test/resourceType/objectArray[*] { "property": "value1", "nestedArray": [ 1, 2 ] },
{ "property": "value2", "nestedArray": [ 3, 4 ] }
Microsoft.Test/resourceType/objectArray[*].property "value1", "value2"
Microsoft.Test/resourceType/objectArray[*].nestedArray [ 1, 2 ], [ 3, 4 ]
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] 1, 2, 3, 4

在範例資源內容上使用 field() 函式時,結果如下所示:

運算式 傳回值
[field('Microsoft.Test/resourceType/missingArray')] ""
[field('Microsoft.Test/resourceType/missingArray[*]')] []
[field('Microsoft.Test/resourceType/missingArray[*].property')] []
[field('Microsoft.Test/resourceType/stringArray')] ["a", "b", "c"]
[field('Microsoft.Test/resourceType/stringArray[*]')] ["a", "b", "c"]
[field('Microsoft.Test/resourceType/objectArray[*]')] [{ "property": "value1", "nestedArray": [ 1, 2 ] }, { "property": "value2", "nestedArray": [ 3, 4 ] }]
[field('Microsoft.Test/resourceType/objectArray[*].property')] ["value1", "value2"]
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray')] [[ 1, 2 ], [ 3, 4 ]]
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray[*]')] [1, 2, 3, 4]

欄位計數運算式

欄位計數運算式會計算有多少陣列成員符合條件,並將計數與目標值進行比較。 與 field 條件相比,使用 Count 來運算陣列更直觀且靈活。 語法為:

{
  "count": {
    "field": <[*] alias>,
    "where": <optional policy condition expression>
  },
  "equals|greater|less|any other operator": <target value>
}

在沒有 where 條件的情況下使用時,count 只會傳回陣列的長度。 沿用上一節的範例資源內容,下列 count 運算式會得出 true,因為 stringArray 有三個成員:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]"
  },
  "equals": 3
}

此行為也適用於巢狀陣列。 例如,下列 count 運算式會得出 true,因為 nestedArray 陣列中有四個陣列成員:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
  },
  "greaterOrEquals": 4
}

count 的力量源自於 where 條件。 指定時,Azure 原則會列舉陣列成員,並根據條件評估每個成員,以計算得出 true 的陣列成員數目。 具體來說,在 where 條件評估的每個反覆運算中,Azure 原則會選取單一陣列成員 i,並根據 where 條件評估資源內容,就像 i 是陣列的唯一成員一樣。 每個反覆運算中只有一個陣列成員可用,可讓您在各個別陣列成員上套用複雜條件。

範例:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]",
    "where": {
      "field": "Microsoft.Test/resourceType/stringArray[*]",
      "equals": "a"
    }
  },
  "equals": 1
}

為了評估 count 運算式,Azure 原則會評估 where 條件三次,每個 stringArray 成員皆須評估一次,以計算其得出 true 的次數。 當 where 條件參考 Microsoft.Test/resourceType/stringArray[*] 陣列成員,而非選取 stringArray 的所有成員時,系統每次只會選取單一陣列成員:

反覆運算 選取的 Microsoft.Test/resourceType/stringArray[*] where 評估結果
1 "a" true
2 "b" false
3 "c" false

count 會傳回 1

以下是更複雜的運算式:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "allOf": [
        {
          "field": "Microsoft.Test/resourceType/objectArray[*].property",
          "equals": "value2"
        },
        {
          "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
          "greater": 2
        }
      ]
    }
  },
  "equals": 1
}
反覆運算 選取的值 where 評估結果
1 Microsoft.Test/resourceType/objectArray[*].property =>"value1"
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1, 2
false
2 Microsoft.Test/resourceType/objectArray[*].property =>"value2"
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3, 4
true

count 會傳回 1

根據完整要求內容評估 where 運算式 (只會變更目前列舉的陣列成員),即代表 where 條件也可參考陣列外部的欄位:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "field": "tags.env",
      "equals": "prod"
    }
  },
  "equals": 0
}
反覆運算 選取的值 where 評估結果
1 tags.env =>"prod" true
2 tags.env =>"prod" true

巢狀計數運算式可用來將條件套用至巢狀陣列欄位。 例如,下列條件會檢查 objectArray[*] 陣列是否只有兩個具備 nestedArray[*] 且包含一個或多個成員的成員:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "count": {
        "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
      },
      "greaterOrEquals": 1
    }
  },
  "equals": 2
}
反覆運算 選取的值 巢狀計數評估結果
1 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1, 2 nestedArray[*] 有 2 個成員 =>true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3, 4 nestedArray[*] 有 2 個成員 =>true

由於 objectArray[*] 的兩個成員都有含兩個成員的子陣列 nestedArray[*],因此外部計數運算式會傳回 2

更複雜的範例:檢查 objectArray[*] 陣列是否只有兩個成員,其中 nestedArray[*] 的任一成員等於 23

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
      "count": {
        "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
        "where": {
            "field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
            "in": [ 2, 3 ]
        }
      },
      "greaterOrEquals": 1
    }
  },
  "equals": 2
}
反覆運算 選取的值 巢狀計數評估結果
1 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1, 2 nestedArray[*] 包含 2 =>true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3, 4 nestedArray[*] 包含 3 =>true

由於 objectArray[*] 的兩個成員都有包含 23 的子陣列 nestedArray[*],因此外部計數運算式會傳回 2

注意

巢狀欄位計數運算式只能參考巢狀陣列。 例如,參考 Microsoft.Test/resourceType/objectArray[*] 的計數運算式可以有以巢狀陣列 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] 為目標的巢狀計數,但不能有以 Microsoft.Test/resourceType/stringArray[*] 為目標的巢狀計數運算式。

使用範本函式存取目前的陣列成員

使用範本函式時,請使用 current() 函式來存取目前陣列成員的值或其任何屬性的值。 若要存取目前陣列成員的值,請將 count.field 中所定義的別名或任何其子別名作為引數傳遞至 current() 函式。 例如:

{
  "count": {
    "field": "Microsoft.Test/resourceType/objectArray[*]",
    "where": {
        "value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
        "like": "value*"
    }
  },
  "equals": 2
}

反覆運算 current() 傳回值 where 評估結果
1 objectArray[*] 的第一個成員的 property 值:value1 true
2 objectArray[*] 的第一個成員的 property 值:value2 true

條件所在的欄位函式

只要計數運算式不在存在條件內,便可使用 field() 函式來取得目前陣列成員的值 (field() 函式一律參考 if 條件所評估的資源)。 參考評估陣列時的行為 field() 是以下列概念為基礎:

  1. 陣列別名會解析為從所有陣列成員選取的值集合。
  2. 參考陣列別名的 field() 函式會傳回含指定值的陣列。
  3. 參考 where 條件內計算的陣列別名會傳回集合,其中包含從目前反覆運算中評估的陣列成員所選取的單一值。

此行為代表在 where 條件中參考含 field() 函式的計數陣列成員時,其會傳回含單一成員的陣列。 雖然此行為可能不直觀,但與陣列別名會一律傳回指定屬性集合的概念一致。 以下是範例:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]",
    "where": {
      "field": "Microsoft.Test/resourceType/stringArray[*]",
      "equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
    }
  },
  "equals": 0
}
反覆運算 運算式值 where 評估結果
1 Microsoft.Test/resourceType/stringArray[*] =>"a"
[field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "a" ]
false
2 Microsoft.Test/resourceType/stringArray[*] =>"b"
[field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "b" ]
false
3 Microsoft.Test/resourceType/stringArray[*] =>"c"
[field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "c" ]
false

因此,當需要使用 field() 函式存取計數陣列別名時,做法是使用 first() 範本函式加以包裝:

{
  "count": {
    "field": "Microsoft.Test/resourceType/stringArray[*]",
    "where": {
      "field": "Microsoft.Test/resourceType/stringArray[*]",
      "equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
    }
  }
}
反覆運算 運算式值 where 評估結果
1 Microsoft.Test/resourceType/stringArray[*] =>"a"
[first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"a"
true
2 Microsoft.Test/resourceType/stringArray[*] =>"b"
[first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"b"
true
3 Microsoft.Test/resourceType/stringArray[*] =>"c"
[first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"c"
true

如需實用範例,請參閱欄位計數範例

修改陣列

在建立或更新期間,appendmodify 會改變資源上的屬性。 使用陣列屬性時,這些效果的行為取決於作業是否嘗試修改 [*] 別名:

注意

搭配別名使用 modify 效果目前為預覽狀態。

Alias 影響 結果
Microsoft.Storage/storageAccounts/networkAcls.ipRules append 若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。
Microsoft.Storage/storageAccounts/networkAcls.ipRules modifyadd 作業 若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。
Microsoft.Storage/storageAccounts/networkAcls.ipRules modifyaddOrReplace 作業 若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列或取代現有陣列。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] append Azure 原則會附加效果詳細資料中指定的陣列成員。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modifyadd 作業 Azure 原則會附加效果詳細資料中指定的陣列成員。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modifyaddOrReplace 作業 Azure 原則會移除所有現有的陣列成員,並附加效果詳細資料中指定的陣列成員。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action append Azure 原則會將值附加至每個陣列成員的 action 屬性。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modifyadd 作業 Azure 原則會將值附加至每個陣列成員的 action 屬性。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modifyaddOrReplace 作業 Azure 原則會附加或取代每個陣列成員的現有 action 屬性。

如需詳細資訊,請參閱附加範例

其他 [*] 別名範例

建議您使用欄位計數運算式來檢查要求內容中陣列成員的「全部」或「任一」成員是否符合條件。 不過,針對某些簡單的條件,您可以使用欄位存取子搭配陣列別名來達成相同的結果,如參考陣列成員集合中所述。 此模式在超過允許計數運算式限制的原則規則中非常實用。 以下是常見使用案例的範例:

下列案例資料表的範例原則規則:

"policyRule": {
    "if": {
        "allOf": [
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
                "exists": "true"
            },
            <-- Condition (see table below) -->
        ]
    },
    "then": {
        "effect": "[parameters('effectType')]"
    }
}

下列情節資料表的 ipRules 陣列如下所示:

"ipRules": [
    {
        "value": "127.0.0.1",
        "action": "Allow"
    },
    {
        "value": "192.168.1.1",
        "action": "Allow"
    }
]

針對下列每個條件範例,將 <field> 取代為 "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"

下列結果是條件和範例原則規則和上述現有值陣列的組合結果:

Condition 結果 案例 說明
{<field>,"notEquals":"127.0.0.1"} Nothing 無相符 一個陣列元素會評估為 false (127.0.0.1 != 127.0.0.1),另一個為 true (127.0.0.1 != 192.168.1.1),因此 notEquals 條件是 false 且不會觸發效果。
{<field>,"notEquals":"10.0.4.1"} 原則效果 無相符 這兩個陣列元素會評估為 true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1),因此 notEquals 條件是 true 並觸發效果。
"not":{<field>,"notEquals":"127.0.0.1" } 原則效果 一或多個作業 一個陣列元素會評估為 false (127.0.0.1 != 127.0.0.1),另一個為 true (127.0.0.1 != 192.168.1.1),因此 notEquals 條件是 false。 邏輯運算子會得出 true (notfalse),因此會觸發效果。
"not":{<field>,"notEquals":"10.0.4.1"} Nothing 一或多個作業 這兩個陣列元素會評估為 true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1),因此 notEquals 條件是 true。 邏輯運算子會得出 false (nottrue),因此不會觸發效果。
"not":{<field>,"Equals":"127.0.0.1"} 原則效果 不是全部相符 一個陣列元素會評估為 true (127.0.0.1 == 127.0.0.1),另一個為 false (127.0.0.1 == 192.168.1.1),因此 Equals 條件是 false。 邏輯運算子會得出 true (notfalse),因此會觸發效果。
"not":{<field>,"Equals":"10.0.4.1"} 原則效果 不是全部相符 這兩個陣列元素都評估為 false (10.0.4.1 == 127.0.0.1 和 10.0.4.1 == 192.168.1.1),因此 Equals 條件為 false。 邏輯運算子會得出 true (notfalse),因此會觸發效果。
{<field>,"Equals":"127.0.0.1"} Nothing 全部相符 一個陣列元素會評估為 true (127.0.0.1 == 127.0.0.1),另一個為 false (127.0.0.1 == 192.168.1.1),因此 Equals 條件是 false 且不會觸發效果。
{<field>,"Equals":"10.0.4.1"} Nothing 全部相符 這兩個陣列元素都評估為 false (10.0.4.1 == 127.0.0.1 和 10.0.4.1 == 192.168.1.1),因此 Equals 條件是 false 且不會觸發效果。

下一步